第一篇 关系数据库设计
第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基础
第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
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 isNULL运算符 110
5.2.3 select语句与字符集 111
5.2.4 使用逻辑运算符 112
5.2.5 使用like进行模糊查询 115
5.3 使用orderby子句对结果集排序 116
5.4 使用聚合函数汇总结果集 117
5.5 使用groupby子句对记录分组统计 118
5.5.1 groupby子句与聚合函数 118
5.5.2 groupby子句与having子句 119
5.5.3 groupby子句与group_concat()函数 120
5.5.4 groupby子句与withrollup选项 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编程
第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 派生表(derivedtable) 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
第四篇 综合实训
第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管理及维护
第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
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 使用createuser创建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 查询缓存QueryCache 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 元数据锁metadatalocks 425
第15章 MySQLCluster 427
15.1 MySQLCluster简介 427
15.1.1 MySQL集群的组成 427
15.1.2 MySQL集群架构 429
15.2 MySQLCluster环境搭建 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
· · · · · · (
收起)