第一部分 综述 2
第1章 MySQL简介 2
1.1 简介 2
1.2 数据库、数据库服务器和数据库语言 2
1.3 关系模型 3
1.3.1 表、列和行 4
1.3.2 Null值 5
1.3.3 约束 5
1.3.4 主键 5
1.3.5 候选键 6
1.3.6 替换键 6
1.3.7 外键 6
1.4 SQL是什么 7
1.5 SQL的历史 10
1.6 从单机到客户/服务器再到Internet 10
1.7 SQL的标准 12
1.8 什么是开源软件 14
1.9 MySQL的历史 15
1.10 本书的组织结构 16
第2章 网球俱乐部示例数据库 17
2.1 简介 17
2.2 网球俱乐部简介 17
2.3 表的内容 19
2.4 完整性约束 21
第3章 安装软件 23
3.1 简介 23
3.2 下载MySQL 23
3.3 安装MySQL 23
3.4 安装查询工具 23
3.5 从Web站点下载SQL语句 23
3.6 准备好了吗 24
第4章 SQL概要 25
4.1 简介 25
4.2 登录到MySQL数据库服务器 25
4.3 创建新的SQL用户 26
4.4 创建数据库 27
4.5 选择当前数据库 27
4.6 创建表 28
4.7 用数据填充表 29
4.8 查询表 30
4.9 更新和删除行 32
4.10 使用索引优化查询过程 33
4.11 视图 34
4.12 用户和数据安全性 35
4.13 删除数据库对象 36
4.14 系统变量 36
4.15 对SQL语句分组 37
4.16 Catalog表 37
4.17 获取错误和警告 43
4.18 SQL语句的定义 44
第二部分 查询和更新数据 46
第5章 SELECT语句:常用元素 46
5.1 简介 46
5.2 直接量及其数据类型 46
5.2.1 整型直接量 49
5.2.2 小数直接量 49
5.2.3 浮点直接量 49
5.2.4 字符直接量 49
5.2.5 日期直接量 51
5.2.6 时间直接量 53
5.2.7 日期时间直接量和时间戳直接量 54
5.2.8 年直接量 56
5.2.9 布尔直接量 56
5.2.10 十六进制直接量 56
5.2.11 位直接量 56
5.3 表达式 57
5.4 为结果列分配名字 59
5.5 列指定 61
5.6 用户变量和SET语句 62
5.7 系统变量 63
5.8 CASE表达式 65
5.9 括号中的标量表达式 70
5.10 标量函数 70
5.11 表达式的类型转换 73
5.12 作为一个表达式的空值 75
5.13 复合标量表达式 76
5.13.1 复合数值表达式 76
5.13.2 复合字符表达式 81
5.13.3 复合日期表达式 82
5.13.4 复合时间表达式 86
5.13.5 复合时间戳和日期时间表达式 87
5.13.6 复合布尔表达式 89
5.14 聚合函数和标量子查询 91
5.15 行表达式 91
5.16 表表达式 92
5.17 练习解答 93
第6章 SELECT语句、表表达式和子查询 97
6.1 简介 97
6.2 SELECT语句的定义 97
6.3 处理一个选择语句块中的子句 100
6.4 表表达式的形式 105
6.5 什么是SELECT语句 107
6.6 什么是子查询 108
6.7 练习解答 112
第7章 SELECT语句:FROM子句 117
7.1 简介 117
7.2 FROM子句中的表指定 117
7.3 再谈列指定 118
7.4 FROM子句中的多个表指定 119
7.5 表名的假名 122
7.6 联接的各种例子 122
7.7 必须使用假名的情况 125
7.8 同数据库的表 127
7.9 FROM子句中的显式联接 127
7.10 外联接 130
7.10.1 左外联接 130
7.10.2 右外联接 133
7.11 自然联接 134
7.12 联接条件中的附加条件 135
7.13 交叉联接 137
7.14 使用USING替换联接条件 137
7.15 带有表表达式的FROM子句 138
7.16 练习解答 144
第8章 SELECT语句:WHERE子句 149
8.1 简介 149
8.2 使用比较运算符的条件 150
8.3 子查询中的比较运算符 155
8.4 带有关联性子查询的比较运算符 159
8.5 不带比较运算符的条件 161
8.6 用ANDOR、XOR和NOT组合的条件 162
8.7 使用表达式列表的IN运算符 165
8.8 带有子查询的IN运算符 169
8.9 BETWEEN运算符 176
8.10 LIKE运算符 178
8.11 REGEXP运算符 180
8.12 MATCH运算符 186
8.13 IS NULL运算符 194
8.14 EXISTS运算符 196
8.15 ALL和ANY运算符 198
8.16 子查询中列的作用域 204
8.17 使用关联性子查询的更多例子 207
8.18 带有否定的条件 211
8.19 练习解答 213
第9章 SELECT语句:SELECT子句和聚合函数 224
9.1 简介 224
9.2 选择所有列(*) 224
9.3 SELECT子句中的表达式 225
9.4 使用DISTINCT移除重复的行 226
9.5 何时两行相等 228
9.6 更多选择选项 230
9.7 聚合函数简介 231
9.8 COUNT函数 232
9.9 MAX和MIN函数 235
9.10 SUM和AVG函数 239
9.11 VARIANCE和STDDEV函数 242
9.12 VAR_SAMP和STDDEV_SAMP函数 243
9.13 BIT_AND、BIT_OR和BIT_XOR函数 244
9.14 练习解答 244
第10章 SELECT语句:GROUP BY子句 248
10.1 简介 248
10.2 对一列分组 248
10.3 对两个或更多列分组 251
10.4 根据表达式分组 253
10.5 对空值的分组 254
10.6 带有排序的分组 255
10.7 GROUP BY子句的一般规则 255
10.8 GROUP-CONCAT函数 257
10.9 使用GROUP BY的复杂例子 258
10.10 使用ROLLUP的分组 263
10.11 练习解答 264
第11章 SELECT语句:HAVING子句 268
11.1 简介 268
11.2 HAVING子句的例子 269
11.3 没有GROUP BY子句的HAVING子句 270
11.4 HAVING子句的一般规则 271
11.5 练习解答 271
第12章 SELECT语句:ORDER BY子句 274
12.1 简介 274
12.2 按照列名排序 274
12.3 根据表达式排序 276
12.4 使用顺序号码排序 277
12.5 按照升序和降序排序 278
12.6 对空值排序 280
12.7 练习解答 281
第13章 SELECT语句:LIMIT子句 282
13.1 简介 282
13.2 获取最前面的值 284
13.3 使用LIMIT子句的子查询 286
13.4 带有偏移量的LIMIT 289
13.5 SQL_CALC_FOUND_ROWS选择选项 289
13.6 练习解答 290
第14章 组合表表达式 292
14.1 简介 292
14.2 使用UNION组合 292
14.3 使用UNINON的规则 295
14.4 保留重复的行 297
14.5 集合运算符和空值 298
14.6 练习解答 298
第15章 用户变量和SET语句 300
15.1 简介 300
15.2 使用SET语句定义变量 300
15.3 使用SELECT语句定义变量 301
15.4 用户变量的应用区域 303
15.5 用户变量的生命期 303
15.6 DO语句 304
15.7 练习解答 304
第16章 HANDLER语句 306
16.1 简介 306
16.2 HANDLER语句的简单示例 306
16.3 打开一个句柄 307
16.4 浏览句柄的行 307
16.5 关闭句柄 310
16.6 练习解答 310
第17章 更新表 311
17.1 简介 311
17.2 插入新的一行 311
17.3 使用另一个表中的行来填充一个表 314
17.4 更新行中的值 316
17.5 更新多个表中的值 319
17.6 替代已有的行 321
17.7 从一个表中删除行 322
17.8 从多个表中删除行 323
17.9 TRUNCATE语句 325
17.10 练习解答 325
第18章 载入和卸载数据 328
18.1 简介 328
18.2 卸载数据 328
18.3 载入数据 331
第19章 使用XML文档 335
19.1 XML概述 335
19.2 存储XML文档 336
19.3 查询XML文档 339
19.4 使用位置查询 344
19.5 XPath的扩展表示法 346
19.6 带有条件XPath表达式 348
19.7 修改XML文档 348
第三部分 创建数据库对象 352
第20章 创建表 352
20.1 简介 352
20.2 创建新表 352
20.3 列的数据类型 354
20.3.1 整数数据类型 356
20.3.2 小数数据类型 357
20.3.3 浮点数据类型 357
20.3.4 位数据类型 360
20.3.5 字符数据类型 360
20.3.6 时间日期类型 361
20.3.7 Blob数据类型 361
20.3.8 几何数据类型 362
20.4 添加数据类型选项 362
20.4.1 数据类型选项UNSIGNED 362
20.4.2 数据类型选项ZEROFILL 363
20.4.3 数据类型选项AUTO_INCREMENT 365
20.4.4 数据类型选项SERIAL DEFAULT VALUE 367
20.5 创建临时表 367
20.6 如果表已经存在 368
20.7 复制表 368
20.8 命令表和列 371
20.9 列选项:Default和Comment 372
20.10 表选项 374
20.10.1 ENGINE表选项 374
20.1 0.2 AUTO_INCREMENT表选项 378
20.10.3 COMMENT表选项 378
20.10.4 AVG_ROW_LENGTH、MAX_ROWS和MIN_ROWS表选项 379
20.11 CSV存储引擎 379
20.12 表和目录 381
20.13 练习解答 383
第21章 声明完整性约束 385
21.1 简介 385
21.2 主键 386
21.3 替代键 388
21.4 外键 390
21.5 参照动作 393
21.6 Check完整性约束 395
21.7 命名完整性约束 396
21.8 删除完整性约束 397
21.9 完整性约束和目录 397
21.10 练习解答 397
第22章 字符集和校对 400
22.1 简介 400
22.2 可用的字符集和校对 401
22.3 给列分配字符集 402
22.4 给列分配校对 404
22.5 带有字符集和校对的表达式 405
22.6 使用校对排序和分组 407
22.7 表达式的可压缩性 408
22.8 相关的系统变量 409
22.9 字符集和目录 410
22.10 练习解答 410
第23章 ENUM和SET类型 411
23.1 简介 411
23.2 ENUM数据类型 411
23.3 SET数据类型 414
23.4 练习解答 419
第24章 修改和删除表 420
24.1 简介 420
24.2 删除整个表 420
24.3 重命令表 421
24.4 修改表结构 421
24.5 修改列 423
24.6 修改完整性约束 425
24.7 练习解答 427
第25章 使用索引 428
25.1 简介 428
25.2 行、表和文件 428
25.3 索引是如何工作的 429
25.4 处理一条SELECT语句的步骤 432
25.5 创建索引 435
25.6 在定义表时定义索引 437
25.7 删除索引 439
25.8 索引和主键 439
25.9 大PLAYERS_XXL表 440
25.10 为索引选择列 442
25.10.1 候选键上的唯一索引 442
25.10.2 外键上的索引 442
25.10.3 包含在选择标准中的列上的索引 442
25.10.4 在列的组合上的索引 444
25.10.5 用来排序的列上的索引 445
25.11 索引和目录 445
25.12 练习解答 447
第26章 视图 448
26.1 简介 448
26.2 创建视图 448
26.3 视图的列名 451
26.4 更新视图:使用CHECK OPTION 452
26.5 视图的选项 453
26.6 删除视图 454
26.7 视图和目录 454
26.8 对更新视图的限制 455
26.9 处理视图语句 456
26.10 视图的应用程序区域 458
26.10.1 例程语句的简化 458
26.10.2 重新组织表 458
26.10.3 SELECT语句的分步编写 461
26.10.4 声明完整性约束 462
26.10.5 数据安全性 462
26.11 练习解答 462
第27章 创建数据库 464
27.1 简介 464
27.2 数据库和目录 464
27.3 新建数据库 465
27.4 修改数据库 465
27.5 删除数据库 466
第28章 用户和数据安全性 468
28.1 简介 468
28.2 添加和删除用户 468
28.3 修改用户名 470
28.4 修改密码 471
28.5 授予表权限和列权限 471
28.6 授予数据库权限 473
28.7 授予用户权限 475
28.8 权限的传递:WITH GRANT OPTION 478
28.9 限制权限 479
28.10 在目录中记录权限 479
28.11 回收权限 481
28.12 视图和通过视图的安全性 483
28.13 练习解答 484
第29章 表维护语句 485
29.1 简介 485
29.2 ANALYZE TABLE语句 485
29.3 CHECKSUM TABLE语句 486
29.4 OPTIMIZE TABLE语句 487
29.5 CHECK TABLE语句 488
29.6 REPAIR TABLE语句 489
29.7 BACKUP TABLE语句 490
29.8 RESTORE TABLE语句 490
第30章 SHOW、DESCRIBE和HELP语句 491
30.1 简介 491
30.2 SHOW语句概览 491
30.3 其他SHOW语句 494
30.4 DESCRIBE语句 495
30.5 HELP语句 495
第四部分 过程式数据库对象 498
第31章 存储过程 498
31.1 简介 498
31.2 存储过程的简例 498
31.3 存储过程的参数 500
31.4 存储过程体 500
31.5 局部变量 502
31.6 SET语句 504
31.7 流程控制语句 504
31.8 调用存储过程 510
31.9 使用SELECT INTO查询数据 512
31.10 出错消息、处理程序和条件 515
31.11 使用一个游标来获取数据 519
31.12 包含不带游标的SELECT语句 523
31.13 存储过程和用户变量 524
31.14 存储过程的特征 524
31.15 存储过程和目录 526
31.16 删除存储过程 527
31.17 存储过程的安全性 528
31.18 存储过程的优点 528
第32章 存储函数 530
32.1 简介 530
32.2 存储函数的例子 531
32.3 存储函数的更多内容 535
32.4 删除存储函数 536
第33章 触发器 537
33.1 简介 537
33.2 触发器的例子 537
33.3 更多复杂的例子 540
33.4 作为完整性约束的触发器 542
33.5 删除触发器 544
33.6 触发器和目录 544
33.7 练习解答 544
第34章 事件 546
34.1 什么是事件 546
34.2 创建事件 546
34.3 事件的属性 553
34.4 修改事件 554
34.5 删除事件 555
34.6 事件和权限 555
34.7 事件和目录 556
第五部分 SQL编程 558
第35章 MySQL和PHP 558
35.1 简介 558
35.2 登录到MySQL 558
35.3 选择数据 559
35.4 创建索引 560
35.5 获取出错消息 562
35.6 会话中的多个连接 562
35.7 带有参数的SQL语句 564
35.8 带有一行的SELECT语句 565
35.9 带有多行的SELECT语句 566
35.10 带有空值的SELECT语句 569
35.11 查询有关表达式的数据 571
35.12 查询目录 573
35.13 保留的MYSQL函数 574
第36章 动态SQL 576
36.1 简介 576
36.2 使用预处理SQL语句 576
36.3 使用用户变量的预处理语句 577
36.4 使用参数的预处理语句 578
36.5 存储过程中的预处理语句 578
第37章 事务和多用户使用 581
37.1 简介 581
37.2 什么是事务 581
37.3 开始事务 585
37.4 保存点 585
37.5 存储过程和事务 587
37.6 多用户使用的问题 587
37.6.1 脏读或未提交的读 588
37.6.2 非重复读 588
37.6.3 幻读 589
37.6.4 遗失更新 589
37.7 锁定 590
37.8 死锁 590
37.9 LOCK TABLE和UNLOCK TABLE语句 591
37.10 隔离级 592
37.11 等待一个锁 593
37.12 处理语句的时刻 593
37.13 使用应用程序锁 594
37.14 练习解答 595