目 录
第一篇 MySQL基础
第1章 数据库与MySQL 3
1.1 认识数据库 3
1.1.1 我们为什么要学习数据库 3
1.1.2 数据库技术经历的阶段 4
1.1.3 数据库管理系统提供的功能 5
1.2 当前流行的数据库 6
1.2.1 Oracle 7
1.2.2 SQL Server 7
1.2.3 IBM的DB2 7
1.2.4 MySQL 7
1.2.5 PostgreSQL 7
1.3 数据库管理系统的基本组成 8
1.3.1 数据库 8
1.3.2 数据表 8
1.3.3 数据库开发语言SQL 9
1.4 认识MySQL数据库 10
1.4.1 MySQL与开源文化 10
1.4.2 MySQL的发展历史 10
1.4.3 使用MySQL的优势 11
1.4.4 MySQL集群 12
1.5 MySQL 8的新特性 14
1.5.1 更简便的NoSQL支持 14
1.5.2 更好的索引 15
1.5.3 更完善的JSON支持 15
1.5.4 安全和账户管理 15
1.5.5 InnoDB的变化 15
1.5.6 数据字典 15
1.5.7 原子数据定义语句 15
1.5.8 资源管理 16
1.5.9 字符集支持 16
1.5.10 优化器增强 16
1.5.11 通用表表达式 16
1.5.12 窗口函数 17
1.5.13 正则表达式支持 17
1.5.14 内部临时表 17
1.5.15 日志记录 18
1.5.16 备份锁 18
1.5.17 增强的MySQL复制 18
1.6 经典习题与面试题 18
1.7 本章小结 19
第2章 MySQL的安装与配置 20
2.1 在Windows平台下安装与配置MySQL 20
2.1.1 安装MySQL 8 20
2.1.2 配置MySQL 8 24
2.1.3 启动MySQL服务 29
2.1.4 关闭MySQL服务 31
2.1.5 配置Path变量 32
2.1.6 登录MySQL数据库 33
2.2 在Linux平台下安装与配置MySQL 34
2.2.1 安装和配置MySQL 8 34
2.2.2 启动MySQL服务 38
2.2.3 登录MySQL数据库 40
2.3 在Mac OS X平台下安装与配置MySQL 40
2.3.1 安装MySQL 8 40
2.3.2 启动MySQL 8 43
2.3.3 配置和登录MySQL 8 44
2.4 MySQL常用图形管理工具 45
2.4.1 MySQL官方客户端MySQL-Workbench 45
2.4.2 SQLyog图形管理工具 49
2.4.3 Navicat图形管理工具 61
2.5 使用免安装的MySQL软件 65
2.5.1 在Windows平台使用免安装的MySQL 8.0 65
2.5.2 在Linux平台使用免安装的MySQL 8.0 68
2.5.3 在Mac OS X平台使用免安装的MySQL 8.0 71
2.6 MySQL安装中的常见问题 73
2.7 综合示例—MySQL的安装 73
2.8 经典习题与面试题 74
2.9 本章小结 75
第3章 数据库操作 76
3.1 在图形化界面操作数据库 76
3.1.1 创建数据库 76
3.1.2 删除数据库 78
3.2 在命令行界面操作数据库 78
3.2.1 创建数据库 78
3.2.2 查看数据库 79
3.2.3 选择数据库 79
3.2.4 删除数据库 79
3.3 什么是存储引擎 80
3.3.1 MySQL支持的存储引擎 81
3.3.2 InnoDB存储引擎 83
3.3.3 MyISAM存储引擎 83
3.3.4 MEMORY存储引擎 84
3.3.5 选择存储引擎 84
3.4 综合示例—数据库的创建和删除 85
3.5 经典习题与面试题 86
3.6 本章小结 87
第4章 表 操 作 88
4.1 数据表的设计理念 88
4.2 创建表 90
4.2.1 创建表的语法形式 90
4.2.2 通过SQLyog创建表 92
4.3 查看表结构 94
4.3.1 DESCRIBE语句查看表定义 94
4.3.2 SHOW CREATE TABLE语句查看表详细定义 95
4.3.3 通过SQLyog查看表 96
4.4 删除表 97
4.4.1 删除表的语法形式 97
4.4.2 通过SQLyog删除表 98
4.5 修改表 100
4.5.1 修改表名—使用RENAME 100
4.5.2 修改表名—通过SQLyog 101
4.5.3 增加字段—在表的最后一个位置增加 102
4.5.4 增加字段—在表的第一个位置增加 103
4.5.5 增加字段—在表的指定字段之后增加 105
4.5.6 增加字段—通过SQLyog 106
4.5.7 删除字段—使用DROP 107
4.5.8 删除字段—通过SQLyog 108
4.5.9 修改字段—修改数据类型 109
4.5.10 修改字段—修改字段的名字 110
4.5.11 修改字段—同时修改字段的名字和类型 111
4.5.12 修改字段—修改字段的顺序 112
4.5.13 修改字段—通过SQLyog 113
4.6 操作表的约束 116
4.6.1 设置表字段的非空约束 116
4.6.2 设置表字段的默认值 118
4.6.3 设置表字段唯一约束(UNIQUE,UK) 119
4.6.4 设置表字段的主键约束 120
4.6.5 设置表字段值自动增加 123
4.6.6 设置表字段的外键约束 125
4.7 综合示例—创建一个学籍数据库和学生信息表 127
4.8 经典习题与面试题 130
4.9 本章小结 131
第5章 MySQL的数据操作 132
5.1 插入数据记录 132
5.1.1 插入完整数据记录 132
5.1.2 插入数据记录的一部分 133
5.1.3 插入多条完整数据记录 135
5.1.4 插入多条部分数据记录 137
5.1.5 插入查询结果 138
5.1.6 通过SQLyog来插入数据记录 140
5.2 更新数据记录 143
5.2.1 更新特定数据记录 143
5.2.2 更新所有数据记录 144
5.2.3 通过SQLyog来更新数据记录 146
5.3 删除数据记录 148
5.3.1 删除特定数据记录 148
5.3.2 删除所有数据记录 150
5.3.3 通过SQLyog删除数据记录 152
5.4 综合示例—学生表的数据操作 154
5.5 经典习题与面试题 157
5.6 本章小结 158
第6章 MySQL的数据类型 159
6.1 整数类型 159
6.2 浮点数类型和定点数类型 160
6.3 日期与时间类型 161
6.4 字符串类型 162
6.4.1 CHAR类型和VARCHAR类型 162
6.4.2 TEXT类型 163
6.4.3 ENUM类型 164
6.4.4 SET类型 164
6.5 二进制类型 164
6.5.1 BINARY和VARBINARY类型 165
6.5.2 BIT类型 165
6.5.3 BLOB类型 165
6.6 如何选择数据类型 166
6.7 经典习题与面试题 167
6.8 本章小结 168
第7章 MySQL运算符 169
7.1 运算符简介 169
7.2 算术运算符 170
7.3 比较运算符 174
7.3.1 常用的比较运算符 174
7.3.2 特殊功能的比较运算符 176
7.4 逻辑运算符 180
7.5 位运算符 182
7.6 运算符的优先级 185
7.7 综合示例—运算符的使用 185
7.8 经典习题与面试题 188
7.9 本章小结 189
第8章 单表查询 190
8.1 基本数据记录查询 190
8.1.1 查询所有字段数据 190
8.1.2 查询指定字段数据 193
8.1.3 避免重复数据查询 194
8.1.4 实现数学四则运算数据查询 195
8.1.5 设置显示格式数据查询 196
8.2 条件数据记录查询 198
8.2.1 查询指定记录 199
8.2.2 带IN关键字的查询 201
8.2.3 带BETWEEN AND关键字的查询 205
8.2.4 带LIKE的模糊查询 207
8.2.5 带IS NULL的查询 211
8.2.6 带AND的多条件查询 213
8.2.7 带OR的多条件查询 215
8.2.8 对查询结果进行排序 217
8.3 统计函数和分组查询 219
8.3.1 MySQL支持的统计函数 220
8.3.2 统计函数针对无数据记录的表 225
8.3.3 简单分组查询 226
8.3.4 实现统计功能分组查询 229
8.3.5 实现多个字段分组查询 231
8.3.6 实现HAVING子句限定分组查询 232
8.4 用LIMIT限制数据记录查询数量 234
8.4.1 不指定初始位置 234
8.4.2 指定初始位置 236
8.5 使用正则表达式查询 238
8.5.1 查询以特定字符或字符串开头的记录 239
8.5.2 查询以特定字符或字符串结尾的记录 240
8.5.3 用符号“.”来替代字符串中的任意一个字符 241
8.5.4 使用“*”和“+”来匹配多个字符 242
8.5.5 匹配指定字符串 243
8.5.6 匹配指定字符串中的任意一个 245
8.5.7 匹配指定字符以外的字符 247
8.5.8 使用{n,}或者{n,m}来指定字符串连续出现的次数 248
8.6 综合示例—查询学生成绩 250
8.7 经典习题与面试题 257
8.8 本章小结 258
第9章 多表查询 259
9.1 关系数据操作 259
9.1.1 并 259
9.1.2 笛卡尔积 260
9.2 内连接查询 261
9.2.1 自连接 262
9.2.2 等值连接 264
9.2.3 不等连接 268
9.3 外连接查询 270
9.3.1 左外连接 271
9.3.2 右外连接 272
9.4 复合条件连接查询 274
9.5 合并查询数据记录 275
9.5.1 带有关键字UNION的并操作 276
9.5.2 带有关键字UNION ALL的并操作 279
9.6 子查询 280
9.6.1 为什么使用子查询 280
9.6.2 带比较运算符的子查询 281
9.6.3 带关键字IN的子查询 286
9.6.4 带关键字EXISTS的子查询 287
9.6.5 带关键字ANY的子查询 290
9.6.6 带关键字ALL的子查询 294
9.7 综合示例—查询学生成绩 296
9.8 经典习题与面试题 300
9.9 本章小结 301
第10章 索引 302
10.1 什么是索引 302
10.1.1 索引的含义和特点 302
10.1.2 索引的分类 303
10.1.3 索引的设计原则 304
10.2 创建和查看索引 305
10.2.1 普通索引—创建表时直接创建 305
10.2.2 普通索引—在已经存在的表上创建 307
10.2.3 普通索引—通过ALTER TABLE语句创建 309
10.2.4 唯一索引—创建表时直接创建 310
10.2.5 唯一索引—在已经存在的表上创建 311
10.2.6 唯一索引—通过ALTER TABLE语句创建 312
10.2.7 全文索引—创建表时直接创建 314
10.2.8 全文索引—在已经存在的表上创建 315
10.2.9 全文索引—通过ALTER TABLE语句创建 317
10.2.10 多列索引—创建表时自动创建 318
10.2.11 多列索引—在已经存在的表上创建 319
10.2.12 多列索引—通过ALTER TABLE语句创建 321
10.2.13 隐藏索引—创建表时自动创建 322
10.2.14 隐藏索引—在已经存在的表上创建 323
10.2.15 隐藏索引—通过ALTER TABLE语句创建 324
10.2.16 降序索引—创建表时自动创建 325
10.2.17 降序索引—在已经存在的表上创建 326
10.2.18 降序索引—通过ALTER TABLE语句创建 327
10.2.19 通过SQLyog创建和修改索引 329
10.3 删除索引 333
10.3.1 删除索引的语法形式 334
10.3.2 通过SQLyog删除索引 335
10.4 综合示例—创建索引 336
10.5 经典习题与面试题 339
10.6 本章小结 340
第11章 视图 341
11.1 什么时候使用视图 341
11.2 创建视图 342
11.2.1 创建视图的语法形式 342
11.2.2 在单表上创建视图 343
11.2.3 在多表上创建视图 346
11.2.4 通过SQLyog创建视图 348
11.3 查看视图 350
11.3.1 使用DESCRIBE | DESC语句查看视图基本信息 350
11.3.2 使用SHOW TABLES语句查看视图基本信息 351
11.3.3 使用SHOW TABLE STATUS语句查看视图基本信息 352
11.3.4 使用SHOW CREATE VIEW语句查看视图详细信息 354
11.3.5 在views表中查看视图详细信息 355
11.3.6 使用SQLyog查看视图信息 356
11.4 修改视图 358
11.4.1 使用CREATE OR REPLACE VIEW语句修改视图 358
11.4.2 使用ALTER语句修改视图 360
11.4.3 通过SQLyog修改视图 361
11.5 更新视图 363
11.5.1 使用SQL语句更新视图 364
11.5.2 更新基本表后视图自动更新 365
11.5.3 删除视图中的数据 367
11.5.4 不能更新的视图 369
11.6 删除视图 372
11.6.1 删除视图的语法形式 372
11.6.2 通过SQLyog删除视图 373
11.7 综合示例—视图应用 374
11.8 经典习题与面试题 378
11.9 本章小结 379
第12章 存储过程和函数 380
12.1 创建存储过程和函数 380
12.1.1 创建存储过程 381
12.1.2 创建存储函数 384
12.1.3 变量的使用 385
12.1.4 定义条件和处理程序 386
12.1.5 光标的使用 388
12.1.6 流程控制的使用 390
12.1.7 通过SQLyog创建存储过程 393
12.2 调用存储过程和函数 398
12.2.1 调用存储过程 398
12.2.2 调用存储函数 399
12.3 查看存储过程和函数 400
12.3.1 使用SHOW STATUS语句查看存储过程和函数的状态 400
12.3.2 使用SHOW CREATE语句查看存储过程和函数的定义 401
12.3.3 从information_schema.Routine表中查看存储过程和函数的信息 402
12.4 修改存储过程和函数 404
12.4.1 修改存储过程和函数的语法 404
12.4.2 使用SQLyog修改存储过程和函数 406
12.5 删除存储过程和函数 409
12.5.1 删除存储过程和函数的语法 409
12.5.2 使用SQLyog删除存储过程和函数 410
12.6 综合示例——创建存储过程和函数 413
12.7 经典习题与面试题 415
12.8 本章小结 417
第13章 触 发 器 418
13.1 什么时候使用触发器 418
13.2 创建触发器 419
13.2.1 创建有一条执行语句的触发器 419
13.2.2 创建包含多条执行语句的触发器 421
13.2.3 通过SQLyog创建触发器 423
13.3 查看触发器 425
13.3.1 通过SHOW TRIGGERS语句查看触发器 425
13.3.2 通过查看系统表triggers实现查看触发器 426
13.3.3 通过SQLyog查看触发器 428
13.4 删除触发器 429
13.4.1 通过DROP TRIGGER语句删除触发器 429
13.4.2 通过工具来删除触发器 430
13.5 综合示例—创建并使用触发器 432
13.6 经典习题与面试题 436
13.7 本章小结 437
第14章 事务和锁 438
14.1 事务概述 438
14.2 MySQL事务控制语句 439
14.3 MySQL事务隔离级别 442
14.3.1 READ-UNCOMMITED(读取未提交内容) 443
14.3.2 READ-COMMITED(读取提交内容) 444
14.3.3 REPEATABLE-READ(可重读) 444
14.3.4 SERIALIZABLE(可串行化) 446
14.4 InnoDB锁机制 446
14.4.1 锁的类型 447
14.4.2 锁粒度 447
14.5 本章小结 450
第二篇 MySQL高级应用
第15章 用户安全管理 453
15.1 权限表 453
15.1.1 user表 453
15.1.2 db表 455
15.1.3 tables_priv表和columns_priv表 456
15.1.4 procs_priv表 457
15.2 账户管理 457
15.2.1 登录和退出MySQL服务器 457
15.2.2 新建普通用户 459
15.2.3 删除普通用户 460
15.2.4 root用户修改自己的密码 461
15.2.5 root用户修改普通用户的密码 464
15.2.6 普通用户修改密码 465
15.2.7 root用户密码丢失的解决办法 467
15.3 权限管理 472
15.3.1 MySQL的各种权限 472
15.3.2 授权 474
15.3.3 查看权限 476
15.3.4 收回权限 478
15.4 访问控制 480
15.4.1 连接核实阶段 480
15.4.2 请求核实阶段 480
15.5 综合示例——综合管理用户权限 481
15.6 经典习题与面试题 484
15.7 本章小结 486
第16章 数据库备份与恢复 487
16.1 数据备份 487
16.1.1 使用MySQLdump命令备份一个数据库 487
16.1.2 使用MySQLdump命令备份一个数据库的某几张表 491
16.1.3 使用MySQLdump命令备份多个数据库 493
16.1.4 直接复制整个数据库目录 495
16.2 数据恢复 496
16.2.1 使用MySQL命令恢复 496
16.2.2 直接复制到数据库目录 497
16.3 数据库迁移 498
16.3.1 相同版本的MySQL数据库之间的迁移 498
16.3.2 不同版本的MySQL数据库之间的迁移 498
16.3.3 不同数据库之间的迁移 499
16.4 表的导出和导入 499
16.4.1 使用SELECT…INTO OUTFILE导出文本文件 500
16.4.2 使用MySQLdump命令导出文本文件 502
16.4.3 使用MySQL命令导出文本文件 508
16.4.4 使用LOAD DATA INFILE方式导入文本文件 511
16.4.5 使用MySQLimport方式导入文本文件 515
16.5 综合示例—数据的备份与恢复 517
16.6 经典习题与面试题 523
16.7 本章小结 524
第17章 日志管理 525
17.1 MySQL软件所支持的日志 525
17.2 操作二进制日志 526
17.2.1 启动二进制日志 526
17.2.2 查看二进制日志 528
17.2.3 使用二进制日志恢复数据库 529
17.2.4 暂停二进制日志 530
17.2.5 删除二进制日志 530
17.3 操作错误日志 534
17.3.1 启动错误日志 535
17.3.2 查看错误日志 535
17.3.3 删除错误日志 536
17.4 通用查询日志 537
17.4.1 启动通用查询日志 537
17.4.2 查看通用查询日志 538
17.4.3 停止通用查询日志 539
17.4.4 删除通用查询日志 540
17.5 慢查询日志 541
17.5.1 启动慢查询日志 541
17.5.2 查看和分析慢查询日志 544
17.5.3 停止慢查询日志 545
17.5.4 删除慢查询日志 547
17.6 综合示例——MySQL日志的综合管理 548
17.7 经典习题与面试题 555
17.8 本章小结 556
第三篇 MySQL实战
第18章 Java操作MySQL数据库 559
18.1 Java连接MySQL数据库 559
18.1.1 JDBC简介 559
18.1.2 下载JDBC驱动MySQL Connector/J 561
18.1.3 在Windows下安装MySQL Connector/J驱动 561
18.1.4 在Linux和Mac OS X下安装MySQL Connector/J驱动 562
18.1.5 在IntelliJ IDEA环境下安装MySQL Connector/J驱动 562
18.1.6 Java连接MySQL数据库 564
18.2 Java操作MySQL数据库 565
18.2.1 使用Statement执行SQL语句—executeQuery()查询 565
18.2.2 使用Statement执行SQL语句—execute()查询 567
18.2.3 使用Statement执行SQL语句—executeUpdate()插入数据 568
18.2.4 使用Statement执行SQL语句—executeUpdate()修改数据 569
18.2.5 使用Statement执行SQL语句—executeUpdate()删除数据 570
18.2.6 使用PreparedStatement执行SQL语句—executeQuery()查询 571
18.2.7 使用PreparedStatement执行SQL语句—execute()查询 572
18.2.8 使用PreparedStatement执行SQL语句—executeUpdate()插入数据 573
18.2.9 使用PreparedStatement执行SQL语句—executeUpdate()修改数据 575
18.2.10 使用PreparedStatement执行SQL语句—executeUpdate()删除数据 576
18.3 Java备份和恢复MySQL数据库 577
18.3.1 使用Java备份MySQL数据库 577
18.3.2 使用Java恢复MySQL数据库 578
18.4 综合示例—人力资源管理系统 579
18.5 本章小结 592
第19章 网上课堂系统数据库设计 593
19.1 系统概述 593
19.2 系统功能 593
19.3 数据库设计和实现 594
19.3.1 设计表 594
19.3.2 设计索引 602
19.3.3 设计视图 604
19.3.4 设计触发器 604
19.4 本章小结 606
第20章 论坛管理系统数据库设计 607
20.1 系统概述 607
20.2 系统功能 608
20.3 数据库设计和实现 608
20.3.1 设计表 609
20.3.2 设计索引 613
20.3.3 设计视图 614
20.3.4 设计触发器 615
20.4 本章小结 617