第一篇 关系数据库设计 2
第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数据库设计辅助工具 5
1.2.3“选课系统”概述 6
1.2.4定义问题域 7
1.2.5编码规范 8
1.3 E-R图 9
1.3.1实体和属性 9
1.3.2关系 10
1.3.3 E-R图的设计原则 12
1.4关系数据库设计 14
1.4.1为每个实体建立一张数据库表 15
1.4.2为每张表定义一个主键 15
1.4.3增加外键表示一对多关系 16
1.4.4建立新表表示多对多关系 18
1.4.5为字段选择合适的数据类型 19
1.4.6定义约束(constraint)条件 19
1.4.7评价数据库表设计的质量 21
1.4.8使用规范化减少数据冗余 21
1.4.9避免数据经常发生变化 25
习题 26
第二篇 MySQL基础 30
第2章 MySQL基础知识 30
2.1 MySQL概述 30
2.1.1 MySQL的特点 30
2.1.2 MySQL服务的安装 32
2.1.3 MySQL服务的配置 34
2.1.4启动与停止MySQL服务 40
2.1.5 MySQL配置文件 41
2.1.6 MySQL客户机 41
2.1.7连接MySQL服务器 42
2.2字符集以及字符序设置 44
2.2.1字符集及字符序概念 44
2.2.2 MySQL字符集与字符序 45
2.2.3 MySQL字符集的转换过程 46
2.2.4 MySQL字符集的设置 47
2.2.5 SQL脚本文件 48
2.3 MySQL数据库管理 49
2.3.1创建数据库 49
2.3.2查看数据库 50
2.3.3显示数据库结构 50
2.3.4选择当前操作的数据库 51
2.3.5删除数据库 51
2.4 MySQL表管理 51
2.4.1 MyISAM和InnoDB存储引擎 51
2.4.2设置默认的存储引擎 52
2.4.3创建数据库表 53
2.4.4显示表结构 54
2.4.5表记录的管理 54
2.4.6 InnoDB表空间 57
2.4.7删除表 59
2.5系统变量 59
2.5.1全局系统变量与会话系统变量 59
2.5.2查看系统变量的值 60
2.5.3设置系统变量的值 62
2.6 MySQL数据库备份和恢复 63
习题 64
第3章 MySQL表结构的管理 66
3.1 MySQL数据类型 66
3.1.1 MySQL整数类型 66
3.1.2 MySQL小数类型 67
3.1.3 MySQL字符串类型 67
3.1.4 MySQL日期类型 68
3.1.5 MySQL复合类型 71
3.1.6 MySQL二进制类型 72
3.1.7选择合适的数据类型 72
3.2创建表 73
3.2.1设置约束 74
3.2.2设置自增型字段 78
3.2.3其他选项的设置 78
3.2.4创建“选课系统”数据库表 79
3.2.5复制一个表结构 80
3.3修改表结构 81
3.3.1修改字段相关信息 81
3.3.2修改约束条件 82
3.3.3修改表的其他选项 83
3.3.4修改表名 83
3.4删除表 84
3.5索引 84
3.5.1理解索引 84
3.5.2索引关键字的选取原则 87
3.5.3索引与约束 88
3.5.4创建索引 88
3.5.5删除索引 90
习题 90
第4章 表记录的更新操作 91
4.1表记录的插入 91
4.1.1使用insert语句插入新记录 91
4.1.2更新操作与字符集 94
4.1.3关于自增型字段 94
4.1.4批量插入多条记录 95
4.1.5使用insert…select插入结果集 96
4.1.6使用replace插入新记录 96
4.2表记录的修改 97
4.3表记录的删除 98
4.3.1使用delete删除表记录 98
4.3.2使用truncate清空表记录 98
4.4 MySQL特殊字符序列 100
习题 102
第5章 表记录的检索 103
5.1 select语句概述 103
5.1.1使用select子句指定字段列表 104
5.1.2使用谓词过滤记录 105
5.1.3使用from子句指定数据源 105
5.1.4多表连接 109
5.2使用where子句过滤结果集 109
5.2.1使用单一的条件过滤结果集 110
5.2.2 is NULL运算符 110
5.2.3 select语句与字符集 111
5.2.4使用逻辑运算符 112
5.2.5使用like进行模糊查询 115
5.3使用order by子句对结果集排序 116
5.4使用聚合函数汇总结果集 117
5.5使用group by子句对记录分组统计 118
5.5.1 group by子句与聚合函数 118
5.5.2 group by子句与having子句 119
5.5.3 group by子句与group_concat()函数 120
5.5.4 group by子句与with rollup选项 120
5.6合并结果集 121
5.7子查询 122
5.7.1子查询与比较运算符 122
5.7.2子查询与in运算符 123
5.7.3子查询与exists逻辑运算符 124
5.7.4子查询与any运算符 125
5.7.5子查询与all运算符 126
5.8选课系统综合查询 126
5.9使用正则表达式模糊查询 129
5.10全文检索 131
5.10.1全文检索的简单应用 132
5.10.2全文检索方式 135
5.10.3布尔检索模式的复杂应用 135
5.10.4 MySQL全文检索的注意事项 137
5.10.5 InnoDB表的全文检索 137
习题 138
第三篇 MySQL编程 140
第6章 MySQL编程基础 140
6.1 MySQL编程基础知识 140
6.1.1常量 140
6.1.2用户自定义变量 142
6.1.3运算符与表达式 147
6.1.4 begin-end语句块 149
6.1.5重置命令结束标记 149
6.2自定义函数 150
6.2.1创建自定义函数的语法格式 150
6.2.2函数的创建与调用 151
6.2.3函数的维护 153
6.2.4条件控制语句 154
6.2.5循环语句 156
6.3系统函数 160
6.3.1数学函数 160
6.3.2字符串函数 162
6.3.3数据类型转换函数 168
6.3.4条件控制函数 169
6.3.5系统信息函数 170
6.3.6日期和时间函数 171
6.3.7其他常用的MySQL函数 177
6.4中文全文检索的模拟实现 179
习题 181
第7章 视图与触发器 183
7.1视图 183
7.1.1创建视图 183
7.1.2查看视图的定义 184
7.1.3视图在“选课系统”中的应用 185
7.1.4视图的作用 186
7.1.5删除视图 187
7.1.6检查视图 187
7.1.7 local与cascade检查视图 188
7.2触发器 189
7.2.1准备工作 190
7.2.2使用触发器实现检查约束 191
7.2.3使用触发器维护冗余数据 192
7.2.4使用触发器模拟外键级联选项 193
7.2.5查看触发器的定义 194
7.2.6删除触发器 195
7.2.7使用触发器的注意事项 195
7.3临时表 196
7.3.1临时表概述 196
7.3.2临时表的创建、查看与删除 196
7.3.3“选课系统”中临时表的使用 197
7.3.4使用临时表的注意事项 198
7.4派生表(derived table) 198
7.5子查询、视图、临时表、派生表 199
习题 200
第8章 存储过程与游标 201
8.1存储过程 201
8.1.1创建存储过程的语法格式 201
8.1.2存储过程的调用 202
8.1.3“选课系统”的存储过程 203
8.1.4查看存储过程的定义 206
8.1.5删除存储过程 208
8.1.6存储过程与函数的比较 208
8.2错误触发条件和错误处理 209
8.2.1自定义错误处理程序 209
8.2.2自定义错误触发条件 211
8.2.3自定义错误处理程序说明 212
8.3游标 212
8.3.1使用游标 212
8.3.2游标在“选课系统”中的使用 213
8.4预处理SQL语句 215
8.4.1预处理SQL语句使用步骤 215
8.4.2“选课系统”中预处理SQL语句的使用 216
8.4.3预处理SQL语句的复杂应用 217
8.4.4静态SQL语句与预处理SQL语句 219
8.5存储程序的说明 219
习题 220
第9章 事务机制与锁机制 221
9.1事务机制 221
9.1.1事务机制的必要性 221
9.1.2关闭MySQL自动提交 222
9.1.3回滚 223
9.1.4提交 224
9.1.5事务 225
9.1.6保存点 226
9.1.7“选课系统”中的事务 229
9.2锁机制 231
9.2.1锁机制的必要性 231
9.2.2 MySQL锁机制的基础知识 232
9.2.3 MyISAM表的表级锁 235
9.2.4 InnoDB表的行级锁 238
9.2.5“选课系统”中的行级锁 240
9.2.6 InnoDB表的意向锁 242
9.2.7 InnoDB行级锁与索引之间的关系 243
9.2.8间隙锁与死锁 245
9.2.9死锁与锁等待 247
9.3事务的ACID特性 249
9.3.1事务的ACID特性 249
9.3.2事务的隔离级别与并发问题 250
9.3.3设置事务的隔离级别 251
9.3.4使用间隙锁避免幻读现象 255
9.4事务与锁机制注意事项 257
习题 257
第四篇 综合实训 260
第10章 网上选课系统的开发 260
10.1 PHP预备知识 260
10.1.1为何选用B/S结构以及PHP脚本语言 260
10.1.2 PHP脚本语言概述 261
10.1.3 PHP脚本程序的工作流程 262
10.1.4 Web服务器的部署 264
10.1.5注意事项 266
10.2软件开发生命周期SDLC 267
10.3网上选课系统的系统规划 267
10.3.1网上选课系统的目标 267
10.3.2网上选课系统的可行性分析 268
10.3.3网上选课系统的项目进度表 268
10.3.4网上选课系统的人员分工 269
10.4网上选课系统的系统分析 269
10.4.1网上选课系统的功能需求分析 270
10.4.2网上选课系统的非功能需求分析 272
10.5网上选课系统的系统设计 272
10.6网上选课系统的系统实施 274
10.6.1准备工作 274
10.6.2制作PHP连接MySQL服务器函数 275
10.6.3制作PHP权限系统函数 276
10.6.4首页index.php的开发 277
10.6.5教师注册模块的开发 278
10.6.6登录模块的开发 281
10.6.7注销模块的开发 283
10.6.8添加班级模块的开发 283
10.6.9学生注册模块的开发 284
10.6.10密码重置模块 285
10.6.11申报课程模块 286
10.6.12课程列表显示模块 287
10.6.13审核申报课程 289
10.6.14取消已审核课程 290
10.6.15 浏览自己申报的课程 290
10.6.16删除课程 291
10.6.17学生选修或者调换已经审核的课程 292
10.6.18查看自己选修的课程 293
10.6.19取消选修课程 294
10.6.20查看课程的学生信息列表 295
10.6.21查看选修人数少于30人的课程信息 296
10.7界面设计与MVC模式 296
10.8网上选课系统的测试 298
习题 299
第五篇 MySQL管理及维护 302
第11章 MySQL日志与事件 302
11.1 MySQL日志 302
11.1.1数据皆需要缓存 302
11.1.2 MySQL错误日志 303
11.1.3 MySQL普通查询日志 303
11.1.4 MySQL慢查询日志 304
11.1.5 MySQL慢查询日志的查看 305
11.2二进制日志 307
11.2.1启动二进制日志 307
11.2.2二进制日志文件内容的查看 308
11.2.3获取当前的二进制日志文件及偏移位置 310
11.2.4使用二进制日志恢复数据库 310
11.2.5与MySQL二进制日志有关的参数 311
11.2.6二进制日志的清理 312
11.3 InnoDB事务日志 312
11.4日志文件的备份 314
11.5 MySQL事件 314
11.5.1创建MySQL事件 314
11.5.2开启MySQL事件调度器 316
11.5.3查看MySQL事件的定义 316
11.5.4删除MySQL事件的定义 317
习题 317
第12章 MySQL备份与恢复 319
12.1备份与恢复概述 319
12.1.1防止数据丢失的方法 319
12.1.2数据备份概述 320
12.2逻辑备份与逻辑恢复 321
12.2.1使用select…into outfile…备份表数据 321
12.2.2恢复表数据 322
12.2.3使用mysqldump备份数据库 325
12.2.4逻辑备份综合示例 326
12.2.5二进制日志恢复数据库的综合示例 327
12.3物理备份与热备份 329
12.3.1物理备份的所需文件 329
12.3.2 MyISAM表物理备份、热备份工具 329
12.3.3 InnoDB表物理备份、热备份工具 330
12.3.4 Xtrabackup的工作原理 331
12.3.5使用Xtrabackup实现完全备份与增量备份 333
12.3.6使用Xtrabackup实现数据库恢复 333
12.4 MySQL复制(replication) 336
12.4.1 MySQL复制的实现原理 337
12.4.2 MySQL复制的实现 337
12.4.3复制线程的状态 339
12.4.4与复制有关的文件 341
12.4.5复制的配置 342
12.4.6 MySQL复制模式 344
12.4.7自增型字段冲突问题 345
12.4.8事件损坏 345
12.4.9小结 346
12.5备份策略 346
习题 347
第13章 MySQL安全管理 348
13.1 MySQL安全管理 348
13.2 MySQL账户与权限表 350
13.2.1 grant命令语法格式 350
13.2.2创建MySQL服务实例级别的账户 351
13.2.3创建MySQL数据库级别的账户 353
13.2.4创建MySQL表级别的账户 356
13.2.5创建MySQL字段级别的账户 357
13.2.6创建MySQL存储程序级别的账户 359
13.2.7注意事项 360
13.2.8 host权限表 361
13.3 MySQL账户管理 362
13.3.1使用create user创建MySQL账户 362
13.3.2查看MySQL账户信息 362
13.3.3删除已有账户 363
13.3.4修改已有账户的信息 363
13.3.5 MySQL账户的资源次数限制 364
13.3.6使用更新语句修改MySQL账户信息 365
13.3.7权限的生效时机 365
13.4 MySQL安全管理的注意事项 365
13.4.1 MySQL账户名重名问题 366
13.4.2 root账号密码丢失问题 368
13.4.3消除MySQL安全隐患 368
13.4.4 MySQL安全管理的其他注意事项 370
习题 371
第14章MySQL优化 372
14.1基础知识 372
14.1.1影响数据库系统性能的组件 372
14.1.2参数信息与状态信息 373
14.1.3缓存机制 373
14.1.4缓存的分类 374
14.1.5超时 375
14.2 MySQL连接的优化 377
14.3缓存的优化 380
14.3.1查询缓存Queru Cache 380
14.3.2结果集缓存 382
14.3.3排序缓存 382
14.3.4 join连接缓存 384
14.3.5表缓存Cache与表结构定义缓存Cache 385
14.3.6表扫描缓存buffer 387
14.3.7 MyISAM索引缓存buffer 388
14.3.8日志缓存 390
14.3.9预读机制 391
14.3.10延迟更新 393
14.3.11内存表与临时表 396
14.4 InnoDB优化 398
14.4.1 InnoDB缓存池 398
14.4.2 InnoDB缓存池内部结构 399
14.4.3 InnoDB缓存池预热 400
14.4.4 InnoDB缓存池的状态信息 401
14.4.5常见的InnoDB参数设置 402
14.4.6 InnoDB实时监控 402
14.5优化表 403
14.5.1优化表结构 403
14.5.2表的拆分 403
14.5.3分区 404
14.5.4表分析与表检查 406
14.5.5 NULL值对统计信息的影响 409
14.5.6记录的格式 409
14.6 SQL语句优化 411
14.6.1了解SQL的执行频率 411
14.6.2定位执行效率较低的SQL语句 413
14.6.3分析select语句 413
14.6.4索引与select语句 416
14.6.5分页与select 418
14.6.6 SQL语句其他注意事项 420
14.6.7 profiling性能分析工具 421
14.7锁资源的优化 422
14.7.1表级锁资源竞争 422
14.7.2表级锁资源竞争的解决方案 422
14.7.3行级锁的资源竞争 423
14.7.4行级锁资源竞争的解决方案 423
14.7.5禁用InnoDB间隙锁 424
14.7.6事务监控与锁监控 424
14.7.7元数据锁metadata locks 425
第15章 MySQL Cluster 427
15.1 MySQL Cluster简介 427
15.1.1 MySQL集群的组成 427
15.1.2 MySQL集群架构 429
15.2 MySQL Cluster环境搭建 429
15.2.1准备工作 429
15.2.2数据节点的配置 430
15.2.3 SQL节点的配置 431
15.2.4管理节点的配置 433
15.2.5 MySQL集群的启动 434
15.2.6集群测试 437
参考文献 439