具体描述
作为世界上最受欢迎的开源数据库之一,MySQL由于其性能优越、功能强大,受到了广大自由软件爱好者甚至是商业软件用户的青睐。本书以讲解MySQL基础知识为目标,以案例的实现为载体,以不同的章节完成不同的任务为理念,深入讲解关系数据库设计、MySQL基础知识以及MySQL编程知识。
本书内容丰富、讲解深入,适用于初学者快速上手,特别适合用作各类院校相关专业的教材。本书入门门槛低,非常适合用作培训机构的培训教材,也适用于计算机二级考试MySQL 数据库程序设计的培训教材,同时也是一本面向广大MySQL爱好者的实用参考书。
作者简介
目录信息
第一篇 关系数据库设计
第1章 数据库设计概述 2
1.1 数据库概述 2
1.1.1 关系数据库管理系统 2
1.1.2 关系数据库 3
1.1.3 结构化查询语言SQL 4
1.2 数据库设计的相关知识 5
1.2.1 商业知识和沟通技能 5
1.2.2 数据库设计辅助工具 6
1.2.3 “选课系统”概述 7
1.2.4 定义问题域 8
1.2.5 编码规范 8
1.3 E-R图 9
1.3.1 实体和属性 10
1.3.2 关系 10
1.3.3 E-R图的设计原则 12
1.4 关系数据库设计 15
1.4.1 为每个实体建立一张数据库表 15
1.4.2 为每张表定义一个主键 16
1.4.3 增加外键表示一对多关系 17
1.4.4 建立新表表示多对多关系 19
1.4.5 为字段选择合适的数据类型 20
1.4.6 定义约束(constraint)条件 20
1.4.7 评价数据库表设计的质量 22
1.4.8 使用规范化减少数据冗余 22
1.4.9 避免数据经常发生变化 26
习题 28
第二篇 MySQL基础
第2章 MySQL基础知识 30
2.1 MySQL概述 30
2.1.1 MySQL的特点 30
2.1.2 MySQL服务的安装 32
2.1.3 MySQL服务的配置 35
2.1.4 启动与停止MySQL服务 40
2.1.5 MySQL配置文件 41
2.1.6 MySQL客户机 42
2.1.7 连接MySQL服务器 43
2.2 字符集以及字符序设置 45
2.2.1 字符集及字符序概念 45
2.2.2 MySQL字符集与字符序 45
2.2.3 MySQL字符集的转换过程 47
2.2.4 MySQL字符集的设置 48
2.2.5 SQL脚本文件 49
2.3 MySQL数据库管理 50
2.3.1 创建数据库 50
2.3.2 查看数据库 51
2.3.3 显示数据库结构 52
2.3.4 选择当前操作的数据库 52
2.3.5 删除数据库 52
2.4 MySQL表管理 53
2.4.1 MyISAM和InnoDB存储引擎 53
2.4.2 设置默认的存储引擎 54
2.4.3 创建数据库表 54
2.4.4 显示表结构 55
2.4.5 表记录的管理 56
2.4.6 InnoDB表空间 59
2.4.7 删除表 61
2.5 系统变量 61
2.5.1 全局系统变量与会话系统变量 61
2.5.2 查看系统变量的值 62
2.5.3 设置系统变量的值 64
2.6 MySQL数据库备份和恢复 65
习题 67
第3章 MySQL表结构的管理 68
3.1 MySQL数据类型 68
3.1.1 MySQL整数类型 68
3.1.2 MySQL小数类型 69
3.1.3 MySQL字符串类型 70
3.1.4 MySQL日期类型 71
3.1.5 MySQL复合类型 73
3.1.6 MySQL二进制类型 75
3.1.7 选择合适的数据类型 75
3.2 创建表 76
3.2.1 设置约束 77
3.2.2 设置自增型字段 81
3.2.3 其他选项的设置 81
3.2.4 创建“选课系统”数据库表 82
3.2.5 复制一个表结构 83
3.3 修改表结构 84
3.3.1 修改字段相关信息 84
3.3.2 修改约束条件 85
3.3.3 修改表的其他选项 87
3.3.4 修改表名 87
3.4 删除表 87
3.5 索引 88
3.5.1 理解索引 88
3.5.2 索引关键字的选取原则 91
3.5.3 索引与约束 92
3.5.4 创建索引 93
3.5.5 删除索引 94
习题 95
第4章 表记录的更新操作 96
4.1 表记录的插入 96
4.1.1 使用insert语句插入新记录 96
4.1.2 更新操作与字符集 99
4.1.3 关于自增型字段 100
4.1.4 批量插入多条记录 100
4.1.5 使用insert…select插入结果集 101
4.1.6 使用replace插入新记录 102
4.2 表记录的修改 103
4.3 表记录的删除 103
4.3.1 使用delete删除表记录 103
4.3.2 使用truncate清空表记录 104
4.4 MySQL特殊字符序列 106
习题 108
第5章 表记录的检索 109
5.1 select语句概述 109
5.1.1 使用select子句指定字段列表 110
5.1.2 使用谓词过滤记录 111
5.1.3 使用from子句指定数据源 112
5.1.4 多表连接 115
5.2 使用where子句过滤结果集 116
5.2.1 使用单一的条件过滤结果集 116
5.2.2 is NULL运算符 117
5.2.3 select语句与字符集 118
5.2.4 使用逻辑运算符 119
5.2.5 使用like进行模糊查询 121
5.3 使用order by子句对结果集排序 122
5.4 使用聚合函数汇总结果集 123
5.5 使用group by子句对记录分组统计 125
5.5.1 group by子句与聚合函数 125
5.5.2 group by子句与having子句 126
5.5.3 group by子句与group_concat()函数 127
5.5.4 group by子句与with rollup选项 127
5.6 合并结果集 128
5.7 子查询 129
5.7.1 子查询与比较运算符 129
5.7.2 子查询与in运算符 131
5.7.3 子查询与exists逻辑运算符 132
5.7.4 子查询与any运算符 133
5.7.5 子查询与all运算符 133
5.8 选课系统综合查询 134
5.9 使用正则表达式模糊查询 138
5.10 全文检索 139
5.10.1 全文检索的简单应用 140
5.10.2 全文检索方式 144
5.10.3 布尔检索模式的复杂应用 144
5.10.4 MySQL全文检索的注意事项 146
5.10.5 InnoDB表的全文检索 146
习题 147
第三篇 MySQL编程
第6章 MySQL编程基础 150
6.1 MySQL编程基础知识 150
6.1.1 常量 150
6.1.2 用户自定义变量 152
6.1.3 运算符与表达式 157
6.1.4 begin-end语句块 159
6.1.5 重置命令结束标记 160
6.2 自定义函数 160
6.2.1 创建自定义函数的语法格式 160
6.2.2 函数的创建与调用 161
6.2.3 函数的维护 163
6.2.4 条件控制语句 165
6.2.5 循环语句 167
6.3 系统函数 171
6.3.1 数学函数 171
6.3.2 字符串函数 173
6.3.3 数据类型转换函数 180
6.3.4 条件控制函数 180
6.3.5 系统信息函数 182
6.3.6 日期和时间函数 183
6.3.7 其他常用的MySQL函数 189
6.4 中文全文检索的模拟实现 191
习题 193
第7章 视图与触发器 195
7.1 视图 195
7.1.1 创建视图 195
7.1.2 查看视图的定义 196
7.1.3 视图在“选课系统”中的应用 197
7.1.4 视图的作用 198
7.1.5 删除视图 199
7.1.6 检查视图 199
7.1.7 local与cascade检查视图 200
7.2 触发器 201
7.2.1 准备工作 202
7.2.2 使用触发器实现检查约束 203
7.2.3 使用触发器维护冗余数据 204
7.2.4 使用触发器模拟外键级联选项 205
7.2.5 查看触发器的定义 206
7.2.6 删除触发器 207
7.2.7 使用触发器的注意事项 207
7.3 临时表 208
7.3.1 临时表概述 208
7.3.2 临时表的创建、查看与删除 208
7.3.3 “选课系统”中临时表的使用 209
7.3.4 使用临时表的注意事项 210
7.4 派生表(derived table) 211
7.5 子查询、视图、临时表、派生表 211
习题 213
第8章 存储过程与游标 214
8.1 存储过程 214
8.1.1 创建存储过程的语法格式 214
8.1.2 存储过程的调用 215
8.1.3 “选课系统”的存储过程 216
8.1.4 查看存储过程的定义 220
8.1.5 删除存储过程 221
8.1.6 存储过程与函数的比较 222
8.2 错误触发条件和错误处理 223
8.2.1 自定义错误处理程序 223
8.2.2 自定义错误触发条件 225
8.2.3 自定义错误处理程序说明 226
8.3 游标 226
8.3.1 使用游标 226
8.3.2 游标在“选课系统”中的使用 227
8.4 预处理SQL语句 229
8.4.1 预处理SQL语句使用步骤 229
8.4.2 “选课系统”中预处理SQL语句的使用 230
8.4.3 预处理SQL语句的复杂应用 231
8.4.4 静态SQL语句与预处理SQL语句 233
8.5 存储程序的说明 234
习题 234
第9章 事务机制与锁机制 235
9.1 事务机制 235
9.1.1 事务机制的必要性 235
9.1.2 关闭MySQL自动提交 237
9.1.3 回滚 237
9.1.4 提交 239
9.1.5 事务 240
9.1.6 保存点 241
9.1.7 “选课系统”中的事务 243
9.2 锁机制 246
9.2.1 锁机制的必要性 246
9.2.2 MySQL锁机制的基础知识 248
9.2.3 MyISAM表的表级锁 250
9.2.4 InnoDB表的行级锁 253
9.2.5 “选课系统”中的行级锁 255
9.2.6 InnoDB表的意向锁 257
9.2.7 InnoDB行级锁与索引之间的关系 258
9.2.8 间隙锁与死锁 261
9.2.9 死锁与锁等待 262
9.3 事务的ACID特性 264
9.3.1 事务的ACID特性 264
9.3.2 事务的隔离级别与并发问题 265
9.3.3 设置事务的隔离级别 266
9.3.4 使用间隙锁避免幻读现象 271
9.4 事务与锁机制注意事项 272
习题 273
第四篇 综合实训
第10章 网上选课系统的开发 276
10.1 PHP预备知识 276
10.1.1 为何选用B/S结构以及PHP脚本语言 276
10.1.2 PHP脚本语言概述 277
10.1.3 PHP脚本程序的工作流程 278
10.1.4 Web服务器的部署 280
10.1.5 注意事项 282
10.2 软件开发生命周期SDLC 283
10.3 网上选课系统的系统规划 283
10.3.1 网上选课系统的目标 284
10.3.2 网上选课系统的可行性分析 284
10.3.3 网上选课系统的项目进度表 284
10.3.4 网上选课系统的人员分工 285
10.4 网上选课系统的系统分析 286
10.4.1 网上选课系统的功能需求分析 286
10.4.2 网上选课系统的非功能需求分析 288
10.5 网上选课系统的系统设计 288
10.6 网上选课系统的系统实施 290
10.6.1 准备工作 290
10.6.2 制作PHP连接MySQL服务器函数 291
10.6.3 制作PHP权限系统函数 293
10.6.4 首页index.php的开发 294
10.6.5 教师注册模块的开发 295
10.6.6 登录模块的开发 298
10.6.7 注销模块的开发 300
10.6.8 添加班级模块的开发 300
10.6.9 学生注册模块的开发 301
10.6.10 密码重置模块 303
10.6.11 申报课程模块 304
10.6.12 课程列表显示模块 305
10.6.13 审核申报课程 307
10.6.14 取消已审核课程 308
10.6.15 浏览自己申报的课程 309
10.6.16 删除课程 310
10.6.17 学生选修或者调换已经审核的课程 310
10.6.18 查看自己选修的课程 311
10.6.19 取消选修课程 312
10.6.20 查看课程的学生信息列表 313
10.6.21 查看选修人数少于30人的课程信息 314
10.7 界面设计与MVC模式 315
10.8 网上选课系统的测试 317
习题 318
参考文献 319
· · · · · · (收起)
读后感
从没见过如此垃圾的书,书中例子很少,而且很多概念根本不知道从何而来,完全是凭自己的思维去写,很难读懂,最气人的是我们学校把这本书当成入门教材,这本书的很多内容都是废话,第一章和第二章完全没用,太垃圾,¥IkMwYFBnHrB¥¥IkMwYFBnHrB¥¥IkMwYFBnHrB¥¥IkMwYFBnHr...
从没见过如此垃圾的书,书中例子很少,而且很多概念根本不知道从何而来,完全是凭自己的思维去写,很难读懂,最气人的是我们学校把这本书当成入门教材,这本书的很多内容都是废话,第一章和第二章完全没用,太垃圾,¥IkMwYFBnHrB¥¥IkMwYFBnHrB¥¥IkMwYFBnHrB¥¥IkMwYFBnHr...
从没见过如此垃圾的书,书中例子很少,而且很多概念根本不知道从何而来,完全是凭自己的思维去写,很难读懂,最气人的是我们学校把这本书当成入门教材,这本书的很多内容都是废话,第一章和第二章完全没用,太垃圾,¥IkMwYFBnHrB¥¥IkMwYFBnHrB¥¥IkMwYFBnHrB¥¥IkMwYFBnHr...
从没见过如此垃圾的书,书中例子很少,而且很多概念根本不知道从何而来,完全是凭自己的思维去写,很难读懂,最气人的是我们学校把这本书当成入门教材,这本书的很多内容都是废话,第一章和第二章完全没用,太垃圾,¥IkMwYFBnHrB¥¥IkMwYFBnHrB¥¥IkMwYFBnHrB¥¥IkMwYFBnHr...
从没见过如此垃圾的书,书中例子很少,而且很多概念根本不知道从何而来,完全是凭自己的思维去写,很难读懂,最气人的是我们学校把这本书当成入门教材,这本书的很多内容都是废话,第一章和第二章完全没用,太垃圾,¥IkMwYFBnHrB¥¥IkMwYFBnHrB¥¥IkMwYFBnHrB¥¥IkMwYFBnHr...
用户评价
这本书绝对是我近期阅读过的最有价值的技术书籍之一,即使我已经接触MySQL多年,依然从中受益匪浅。作者在MySQL数据库基础概念的讲解上,可以说达到了教科书般的严谨和清晰。从最基础的SQL语法,如SELECT、INSERT、UPDATE、DELETE,到数据类型、约束、索引等核心概念,都进行了深入浅出的阐述。我特别欣赏的是,作者并没有停留在理论层面,而是通过大量的实际案例来巩固这些概念。例如,在讲解索引时,不仅仅是告诉你B-Tree是什么,而是通过一个电商网站的商品搜索场景,详细展示了如何通过创建合适的索引来极大地提升查询效率,以及不同类型的索引(如单列索引、联合索引)在实际应用中的优劣势。书中对于数据库设计原则的探讨也相当有见地,特别是关于范式理论的讲解,并没有生搬硬套,而是结合了现实世界的业务需求,说明了在什么情况下需要遵循什么范式,以及反范式设计带来的权衡。我曾经在工作中遇到过一个性能瓶颈,一直找不到根本原因,读完书中关于查询优化和性能调优的章节后,我豁然开朗,并尝试了书中提到的方法,最终成功解决了问题。总的来说,这本书就像一个经验丰富的导师,循序渐进地引导你掌握MySQL的精髓,无论是初学者还是有一定经验的开发者,都能从中获得宝贵的知识和实用的技巧。它不仅仅是一本技术手册,更是一本能够帮助你提升问题解决能力的工具书。
我是一位项目经理,虽然不直接编写SQL,但理解数据库的原理和优化方法对于我指导开发团队至关重要。这本书在这一点上做得非常出色。它并没有回避技术细节,而是用一种相对平实的语言解释了MySQL的复杂概念。例如,在讲解索引时,作者不仅仅是告诉我们创建索引能提高查询速度,还解释了索引是如何工作的,以及为什么有些情况下过度索引反而会降低性能。书中关于数据库事务和并发控制的章节,也用通俗易懂的例子说明了这些概念,让我能够更好地理解开发人员在讨论这些问题时遇到的挑战。我尤其看重书中关于数据库安全和备份恢复的内容,这对于项目的稳定性和数据的安全性至关重要。通过这本书,我能够与开发团队进行更有效的沟通,更好地评估项目风险,并做出更明智的技术决策。这本书的优点在于,它能够帮助非技术背景的读者也能理解数据库的核心概念,从而更好地与技术团队协作。
我是一个对数据库的“安全”和“可靠性”非常重视的开发者,这本书在这两个方面的内容让我非常满意。作者详细讲解了MySQL的各种安全措施,包括用户权限管理、密码策略、SSL加密、SQL注入防护等。我还从书中学习到了如何进行数据库的备份和恢复,以及如何构建高可用数据库集群来保证数据的可靠性。书中对不同的备份策略(全备、增量备、差异备)进行了详细的介绍,并给出了相应的操作指南。他还讲解了如何使用MHA、Galera Cluster等工具来实现数据库的高可用。我曾经在一次意外的服务器宕机中,通过书中介绍的备份恢复方法,成功地将数据恢复到最近的状态,避免了巨大的损失。这本书的优点在于,它不仅关注数据库的功能性,更关注数据库的健壮性和安全性,为项目的稳定运行提供了坚实的保障。
在我看来,这本书的最大的价值在于它的“实战”导向。它不是那种只讲理论的书,而是真正教会你如何将MySQL应用到实际的项目中。作者在书中提供了大量的代码示例和配置文件,这些都是可以直接拿来使用的。我尤其喜欢书中关于“数据库高可用方案”的讲解,详细介绍了Keepalived、MHA、Galera Cluster等不同的高可用方案,以及它们的优缺点和适用场景。这对于需要构建稳定可靠的数据库系统的开发者来说,无疑是一份非常宝贵的参考资料。书中还介绍了如何进行数据库的性能监控和故障排查,这对于保证系统的稳定运行至关重要。我曾经遇到过一个数据库性能突然下降的问题,通过书中介绍的监控工具和排查方法,我很快就找到了原因并解决了问题。这本书的优点在于,它不仅让你掌握了MySQL的基本操作,更能让你学会如何构建、维护和优化生产环境中的MySQL数据库。
我是一个对数据库原理充满好奇的学习者,这本书恰好满足了我对“为什么”的探索欲。作者在讲解MySQL的内部机制时,并没有回避技术细节,而是用一种清晰易懂的方式呈现出来。例如,在讲解InnoDB的事务日志(redo log和undo log)时,作者不仅仅是告诉你它们的作用,还详细解释了它们是如何工作的,以及它们在保证数据持久性和原子性方面扮演的角色。他还提到了MVCC(多版本并发控制)的实现原理,这对于理解MySQL在高并发场景下的性能表现非常有帮助。书中关于MySQL的扩展性设计,例如分片、读写分离等,也进行了详细的介绍,并提供了相关的实践建议。我曾经在项目中遇到过数据库读写压力过大的问题,通过学习书中关于读写分离的知识,我们成功地将读请求分散到多个从库上,显著提升了系统的吞 up。这本书的价值在于,它让你不仅仅学会如何使用MySQL,更能理解MySQL是如何工作的,从而能够更有效地解决问题和进行性能优化。
我必须说,这本书的实战性是我在同类书籍中最看重的一点。它不是那种纸上谈兵的书,而是真正从解决实际问题的角度出发。作者在“实例教程”部分下足了功夫,每个例子都非常贴近开发者的日常工作。比如,在讲解事务处理时,不仅仅是解释ACID特性,而是通过一个银行转账的经典场景,生动形象地演示了如何通过BEGIN、COMMIT、ROLLBACK来保证数据的一致性,以及并发访问时可能出现的各种问题,并提供了相应的解决方案。更让我惊喜的是,书中还涵盖了许多在实际项目中容易被忽视但又至关重要的细节,例如存储过程和函数的编写,如何有效地利用视图来简化复杂查询,以及触发器的应用场景。我特别喜欢书中关于数据库备份与恢复的章节,详细讲解了全备、增量备、差异备的区别和适用场景,以及如何利用mysqldump和Percona XtraBackup等工具进行操作,这对于保证数据安全至关重要。在性能调优方面,书中提供了许多实用的SQL语句分析技巧,例如如何使用EXPLAIN来分析查询计划,以及如何根据分析结果进行SQL语句的优化和索引的调整。我曾经遇到过一个非常复杂的查询,执行效率极低,通过书中介绍的EXPLAIN用法,我很快就找到了瓶颈所在,并进行了相应的优化,将查询时间从几分钟缩短到了几秒钟。这本书的优点在于,它不仅告诉你“是什么”,更告诉你“怎么做”,而且“怎么做得更好”。
这本书最让我赞赏的一点是它对“数据库性能优化”的深度挖掘。作者没有止步于简单的SQL调优,而是深入探讨了MySQL的底层机制,例如查询优化器的工作原理、缓存机制、I/O优化等。书中提供了大量实用的性能分析和调优技巧,例如如何使用EXPLAIN命令来分析查询计划,如何识别慢查询,以及如何通过调整MySQL的配置文件来提升性能。我还从书中学习到了如何进行数据库的负载均衡和读写分离,这对于构建高可用、高性能的数据库系统至关重要。作者还介绍了如何使用一些第三方工具来辅助数据库的性能监控和调优,例如Percona Toolkit等。我曾经遇到过一个非常棘手的数据库性能问题,通过书中介绍的方法,我最终找到了瓶颈所在,并成功地将系统的响应时间缩短了近一半。这本书的优点在于,它不仅教会了你如何“解决”性能问题,更教会了你如何“预防”性能问题的发生。
这本书的作者绝对是一位深谙MySQL之道的大牛。从他对MySQL架构的理解,到他对SQL语言的精辟分析,再到他对数据库性能调优的独到见解,都展现出了极高的专业水准。我尤其欣赏书中在讲解复杂概念时所表现出的逻辑性和条理性。例如,在讲解MySQL的存储引擎时,作者并没有简单地列举InnoDB和MyISAM,而是深入分析了它们各自的优缺点,以及在不同应用场景下的选择依据。他还提到了其他一些不那么常见的存储引擎,并解释了它们出现的意义和适用范围。这本书让我对MySQL有了更深层次的理解,不再是停留在“增删改查”的表面。在数据库安全方面,书中也给出了非常实用的建议,包括如何设置强密码策略,如何配置用户权限,以及如何防范SQL注入等常见的安全威胁。这些内容对于任何一个负责任的开发者来说都至关重要。我记得书中有一个章节专门讲解了如何进行数据库的迁移和升级,这对于需要进行系统重构或者版本更新的团队来说,无疑是一份宝贵的指南。作者用一种非常易于理解的方式,将原本枯燥的技术概念转化为生动的知识,让我能够快速掌握并应用。
我是一名初入数据库领域的新人,这本书就像为我量身定做的启蒙导师。作者从最基础的“什么是数据库”开始讲解,循序渐进地引导我认识MySQL的方方面面。他用非常生动形象的比喻来解释抽象的概念,例如将数据库表比作Excel表格,将SQL语句比作我们日常沟通的语言,这让我更容易理解。书中关于SQL语句的讲解,从最简单的查询到复杂的联接,都提供了清晰的语法和丰富的示例。我特别喜欢书中关于“创建数据库和表”的章节,作者详细讲解了各种数据类型和约束的含义,以及如何在设计表结构时考虑数据的完整性和一致性。他还介绍了一些常用的数据库管理工具,例如MySQL Workbench,这让我能够更方便地进行数据库的管理和开发。这本书的优点在于,它能够帮助初学者快速建立起对MySQL的基本认知,并为进一步深入学习打下坚实的基础。
坦白说,我在购买这本书之前,对MySQL的理解还比较零散,很多知识点都是在项目中摸索着学习的。而这本书的出现,就像给我搭建了一个完整的知识体系框架。作者在内容的组织上非常用心,从最基础的安装配置,到进阶的性能优化,再到高级的应用场景,都做到了环环相扣。我最喜欢的是书中关于“读写分离”和“主从复制”的章节,这对于构建高可用、高性能的数据库集群至关重要。作者详细讲解了配置主从复制的步骤,以及如何处理数据同步延迟等常见问题。他还介绍了分库分表等大数据量下的解决方案,这为我解决实际工作中遇到的扩展性挑战提供了思路。书中对于MySQL的面试常考点也进行了梳理,并给出了相应的解答和分析,这对于我准备面试也起到了很大的帮助。我之前在面试时,对于某些数据库相关的技术问题总是含糊不清,而读完这本书后,我能够自信地回答很多问题。这本书的优点在于,它不仅覆盖了MySQL的方方面面,而且在每个方面都进行了深入的挖掘,让你能够真正理解其背后的原理。