第1章 数据库入门 1
1.1 数据库的发展史 1
1.2 数据库中数据存储形态(数据模型) 1
1.2.1 层次(阶层)数据库 2
1.2.2 网状(网络)数据库 2
1.2.3 关系数据库 2
1.2.4 面向对象的数据库 2
1.3 为什么应用开发离不开数据库 3
1.4 SQL介绍 3
1.4.1 SQL简介 3
1.4.2 SQL的特点 3
1.4.3 SQL的基本语句 4
第2章 MySQL基本管理 5
2.1 MySQL的客户端与服务器端 5
2.1.1 MySQL客户端与服务器端的概念 5
2.1.2 MySQL客户端 5
2.1.3 Navicat for MySQL的安装 5
2.1.4 运行Navicat for MySQL 7
2.1.5 Navicat for MySQL的连接与使用 7
2.2 MySQL服务器的启动与停止 9
2.2.1 SQL的组成部分 9
2.2.2 进入MySQL命令模式 10
2.2.3 创建数据库 10
2.2.4 数据库命名规范及改变当前数据库 11
2.2.5 删除数据库 11
2.2.6 创建数据表 12
2.3 删除表 13
2.4 安全复制表 13
2.5 安全修改表 14
2.5.1 新增字段 14
2.5.2 删除字段 15
2.5.3 修改字段 15
2.5.4 增加主键 16
2.6 MySQL命令行中不能输入中文的解决办法 16
第3章 MySQL账户权限设置 17
3.1 了解MySQL权限系统 17
3.2 MySQL权限操作 19
3.2.1 GRANT命令使用说明 19
3.2.2 权限相关操作 20
3.2.3 权限操作样本 23
3.3 丢失MySQL ROOT密码的解决方法 25
第4章 MySQL数据库表列的数据类型 29
4.1 数值类型 29
4.1.1 整数类型 29
4.1.2 浮点类型 30
4.2 字符串类型 30
4.3 CHAR与VARCHAR类型区别 30
4.4 列类型属性ZEROFILL(填充0) 31
4.5 列类型属性UNSIGEND(无符号)与SIGNED(有符号) 31
4.6 TEXT与BLOB类型的区别 32
4.7 ENUM与SET类型处理 33
4.8 SET类型的处理方式 33
4.9 网站中常用数据类型介绍 34
4.10 DEFAULT(默认)使用技巧 35
第5章 MySQL表结构的维护 36
5.1 表结构的创建 36
5.1.1 MySQL表结构创建语法解释说明 36
5.1.2 MySQL表结构创建实例 40
5.1.3 MySQL表名修改 43
5.2 表结构的维护 43
5.2.1 MySQL添加字段 44
5.2.2 MySQL删除字段 44
5.2.3 MySQL调整字段顺序 44
5.2.4 MySQL删除主键 45
5.2.5 MySQL增加主键 45
5.2.6 MySQL重命名列 45
5.2.7 MySQL改变列类型 46
5.2.8 MySQL添加索引 46
5.2.9 MySQL添加唯一索引 46
5.2.10 MySQL删除索引 47
5.3 MySQL修改库、表及列字符集 47
5.3.1 MySQL修改库字符集 47
5.3.2 MySQL修改表字符集 47
5.3.3 MySQL修改列(字段)字符集 48
5.3.4 MySQL修改字符集的有关注意事项 48
5.3.5 MySQL字符集的查看 48
第6章 MySQL的索引 50
6.1 索引概述 50
6.1.1 关于索引的建议 51
6.1.2 MySQL中使用索引 51
6.2 UNIQUE实际开发中的使用方法 52
6.3 主键(primary key)使用方法 53
6.3.1 主键的作用 53
6.3.2 主键的创建方法 53
6.4 AUTO_INCREMENT自增使用技巧 54
6.4.1 AUTO_INCREMENT的属性 54
6.4.2 使用AUTO_INCREMENT时的注意事项 54
6.4.3 关于MySQL的AUTO_INCREMENT问题分析 55
第7章 MySQL的基本查询 57
7.1 SELECT的语法结构 57
7.1.1 语法结构说明 57
7.1.2 语法解释 58
7.1.3 关于MySQL迭代 59
7.2 SELECT准备 59
7.3 SELECT、DELETE、UPDATE的WHERE子句 63
7.4 MySQL查询、删除、更新WHERE子句AND与OR 65
7.5 MySQL的CONCAT函数 65
7.6 GROUP_CONCAT()分组拼接函数 66
7.6.1 函数使用 66
7.6.2 关于GROUP CONCAT函数返回值长度限制说明 67
7.7 MySQL的DISTINCT使用方法 67
7.8 MySQL的IS NULL与IS NOT NULL使用方法 68
7.9 MySQL的IF()与IFNULL()使用方法 68
7.10 MySQL的ORDER BY子句的使用 70
7.10.1 ORDER BY子句第一种使用方式 70
7.10.2 ORDER BY子句第二种使用方式 70
7.11 MySQL的LIMIT关键字使用 71
7.12 MySQL的BETWEEN...AND...关键字使用 71
7.13 MySQL的IN关键字使用 72
7.13.1 IN的普通用法 72
7.13.2 IN的子查询用法 72
7.14 MySQL的EXISTS关键字使用 73
7.15 MySQL查询SET数据类型的方法 74
7.15.1 函数FIND_IN_SET介绍 74
7.15.2 将函数FIND_IN_SET运用于SET类型数据查询 74
7.15.3 将函数FIND_IN_SET运用于排名 74
7.15.4 FIND_IN_SET与逻辑运算操作IN的区别 76
7.16 MySQL LIKE与NOT LIKE用法 77
7.16.1 LIKE的通配符 77
7.16.2 NOT LIKE 77
7.17 MySQL REGEXP正则的使用 78
7.17.1 REGEXP的运算符 78
7.17.2 REGEXP的通配符 78
7.17.3 REGEXP实例 79
7.18 MySQL RAND随机函数使用 80
7.19 终端执行SQL的方式 81
第8章 MySQL数据库的字符集设计 83
8.1 MySQL的二进制与非二进制字符串 83
8.1.1 MySQL的二进制字符串及二进制类型 83
8.1.2 MySQL的BINARY、CHAR、VARCHAR的区别 86
8.2 MySQL字符集设置与常见问题处理 88
8.2.1 基本概念 88
8.2.2 MySQL系统变量 88
8.2.3 MySQL字符集支持的两个方面 89
8.2.4 MySQL默认字符集的查看 89
8.2.5 MySQL默认字符集的修改 90
8.2.6 MySQL字符集的相互转换过程 91
8.3 MySQL常用字符集选择 92
8.4 MySQL字符集与校对规则 93
8.4.1 简要说明 93
8.4.2 详细说明 93
8.5 MySQL各字符集下汉字或字母所占字节数 95
8.6 MySQL字符集校对规则实例详解 96
8.7 MySQL数据库、表、字段字符集 97
8.7.1 创建数据库、表、表列指定字符集 98
8.7.2 修改数据库、表、表列的字符集 99
8.7.3 查看数据库、表、表列的字符集 100
8.7.4 查看数据库、表、表列的字符集的排序规则 101
第9章 MySQL的增加、删除和修改操作 103
9.1 MySQL增加、删除和修改操作的严格模式与宽松模式 103
9.1.1 严格与宽松的概念 103
9.1.2 严格模式与宽松模式的开启与关闭 103
9.1.3 严格模式与宽松模式举例 104
9.2 MySQL的增加数据INSERT 105
9.2.1 INSERT语法 105
9.2.2 INSERT语法共性说明 106
9.2.3 MySQL INSERT应用举例 107
9.3 MySQL的更新数据UPDATE 108
9.3.1 UPDATE语法 108
9.3.2 UPDATE实际应用举例 110
9.3.3 UPDATE应用实例总结 113
9.4 MySQL的删除数据DELETE 113
9.5 MySQL的左、右外连接查询 116
9.5.1 左外连接举例 116
9.5.2 右外连接举例 116
第10章 MySQL的流程控制与函数 118
10.1 MySQL操作符 118
10.1.1 MySQL算术运算符 118
10.1.2 MySQL比较运算符 118
10.1.3 MySQL逻辑运算符 119
10.1.4 MySQL位运算符 120
10.1.5 MySQL操作符的优先级 120
10.1.6 MySQL操作符举例 121
10.2 MySQL中的Boolean类型 125
10.2.1 Boolean说明 125
10.2.2 Boolean总结 125
10.3 MySQL的COALESCE与GREATEST 126
10.3.1 COALESCE()取非NULL(空)值 126
10.3.2 GREATEST()取最大值 126
10.4 MySQL流程控制语句 127
10.4.1 IF语句 127
10.4.2 CASE语句 129
10.4.3 WHILE语句 133
10.4.4 LOOP语句 134
10.4.5 REPEAT语句 135
10.5 MySQL函数 136
10.5.1 MySQL流程控制函数 136
10.5.2 MySQL字符串处理函数 138
10.5.3 MySQL数学函数 147
10.5.4 MySQL日期时间函数 152
10.5.5 MySQL其他函数 165
第11章 MySQL的日期与时间 168
11.1 MySQL的日期与时间类型 168
11.1.1 YEAR类型 168
11.1.2 TIME类型 170
11.1.3 DATA类型 172
11.1.4 DATATIME类型 173
11.1.5 TIMESTAMP类型 175
11.1.6 MySQL的日期选取 176
11.1.7 MySQL选择日期类型的原则 177
11.1.8 MySQL获得当前日期时间 177
11.2 MySQL日期与时间函数实例 177
11.2.1 STR_TO_DATE()函数 177
11.2.2 DATE_FORMAT()函数 178
11.2.3 TIME_FORMAT()函数 179
11.2.4 UNIX_TIMESTAMP()函数 180
11.2.5 INTERVAL expr TYPE()函数 181
11.2.6 给日期增加一个时间间隔函数DATE_ADD() 182
11.2.7 两个日期相减函数DATEDIFF() 185
11.2.8 两个时间相减函数TIMEDIFF() 185
11.2.9 两个时间相减函数TIMESTAMPDIFF() 186
11.2.10 添加时间间隔函数TIMESTAMPADD() 189
第12章 MySQL的分组与统计 193
12.1 MySQL COUNT()函数 193
12.1.1 准备工作 193
12.1.2 COUNT(*|n|空值|字段名) 193
12.1.3 DISTINCT与COUNT连用 194
12.1.4 GROUP BY(多个字段)与COUNT分组计数 194
12.1.5 CASE WHEN语句与COUNT连用 195
12.2 MySQL MIN()、MAX()、AVG()和SUM()函数 196
12.2.1 准备工作 196
12.2.2 MAX()最大值函数 197
12.2.3 MIN()最小值函数 198
12.2.4 AVG()求平均函数 199
12.2.5 SUM()求和函数 200
12.3 MySQL GROUP BY分组 201
12.3.1 准备工作 201
12.3.2 GROUP BY说明 202
12.3.3 GROUP BY举例 202
12.4 MySQL HAVING分组统计结果的筛选 204
12.4.1 MySQL HAVING说明 204
12.4.2 MySQL HAVING示例 205
第13章 MySQL的多表联合操作 206
13.1 MySQL多表操作基础部分 206
13.1.1 数据库的约束 206
13.1.2 多表查询使用场景 208
13.1.3 一对一、一对多表关系分析 211
13.1.4 多对多表关系分析 212
13.2 MySQL多表操作实例操作 212
13.2.1 笛卡儿积 212
13.2.2 内部连接操作 215
13.2.3 左外连接操作 217
13.2.4 右外连接操作 218
13.2.5 自连接操作 220
13.2.6 多表实例操作 220
第14章 MySQL工作机制 229
14.1 MySQL多线程分析 229
14.1.1 调度方式实现 229
14.1.2 线程池实现 230
14.1.3 线程池优化 233
14.1.4 线程模式控制 233
14.1.5 InnoDB存储引擎的线程控制机制 234
14.2 MySQL的共享锁与排他锁 237
14.3 MySQL的表级锁、页级锁与行级锁 241
14.3.1 MySQL的表级锁、页级锁与行级锁的简要介绍 241
14.3.2 MySQL的表级锁、页级锁与行级锁总结 245
14.4 MySQL存储引擎和事务 245
14.5 MySQL的事务处理 246
14.5.1 MySQL事务的ACID 246
14.5.2 MySQL的COMMIT与ROLLBACK 247
14.5.3 MySQL的事务保存点SAVEPOINT 250
14.5.4 MySQL接受用户请求、SQL语句执行过程 257
第15章 MySQL存储引擎 258
15.1 MySQL数据库引擎介绍 258
15.2 MySQL存储引擎的比较 262
15.3 MySQL数据文件存放位置 263
15.4 MySQL数据库引擎更换 264
15.5 MySQL数据库引擎添加与拔出 265
15.6 MySQL数据库引擎的应用场景 265
15.6.1 选择合适的MySQL存储引擎 265
15.6.2 MySQL存储引擎应用场景 267
第16章 MySQL视图、存储程序 269
16.1 MySQL视图 269
16.1.1 为什么使用视图 269
16.1.2 MySQL创建视图 270
16.1.3 MySQL查看视图 274
16.1.4 MySQL删除视图 275
16.1.5 MySQL修改视图 275
16.2 MySQL存储过程/存储函数 275
16.2.1 MySQL变量的定义 275
16.2.2 MySQL SET与DECLARE声明变量 279
16.2.3 MySQL预处理语句 282
16.2.4 MySQL存储过程的概念详解 286
16.2.5 MySQL结束符的设置 292
16.2.6 MySQL存储过程的BEGIN...END 293
16.2.7 MySQL IF语句 293
16.2.8 MySQL CASE语句 296
16.2.9 MySQL WHILE语句 300
16.2.10 MySQL LOOP语句 301
16.2.11 MySQL REPEAT语句 303
16.2.12 MySQL ITERATE语句 304
16.2.13 MySQL存储过程BEGIN...END嵌套 305
16.2.14 MySQL SELECT...INTO语句 306
16.2.15 MySQL存储函数 307
16.3 MySQL触发器 312
16.3.1 MySQL触发器的概念 312
16.3.2 MySQL触发器的作用 312
16.3.3 MySQL触发器的优点 313
16.3.4 MySQL触发器的创建 313
16.3.5 MySQL触发器的查看与删除 315
16.3.6 MySQL触发器的执行顺序 315
16.3.7 MySQL触发器实例 316
第17章 MySQL备份与恢复 324
17.1 MySQL数据库备份的多种操作手段 324
17.1.1 数据库备份的重要性 324
17.1.2 mysqldump常用命令 324
17.1.3 mysqldump备份所有数据库 328
17.1.4 mysqldump备份多个数据库 329
17.1.5 MySQL命令恢复mysqldump备份的数据库 330
17.2 MySQL BINLOG日志管理 331
17.2.1 MySQL BINLOG日志详解 331
17.2.2 MySQL增量备份BINLOG日志 345
第18章 全解MySQL性能优化 347
18.1 MySQL数据库设计良好架构的必要性 347
18.1.1 应用需求数据架构的概念 347
18.1.2 MySQL常见数据库服务器配置架构 348
18.1.3 MySQL数据库服务器经典配置架构 349
18.2 MySQL字段类型的选择 350
18.3 MySQL数据库索引 351
18.3.1 MySQL索引的概念 351
18.3.2 MySQL索引的优缺点 351
18.3.3 MySQL索引的类型 353
18.3.4 MySQL索引的优化 355
18.4 MySQL查询优化 356
18.4.1 MySQL查询优化应注意的问题 356
18.4.2 MySQL EXPLAN详解 359
18.4.3 MySQL多表查询优化 368
18.4.4 MySQL子查询分析 373
18.4.5 MySQL JOIN语句优化分析 377
18.4.6 MySQL数据导入优化 378
18.4.7 MySQL INSERT性能提高 379
18.4.8 MySQL GROUP BY分组优化 381
18.4.9 MySQL ORDER BY索引优化 385
18.4.10 MySQL OR索引分析 387
18.4.11 MySQL STATUS获得MySQL状态 390
18.4.12 MySQL慢查询SLOW 404
18.4.13 合理使用MySQL锁机制 407
18.4.14 MySQL优先级 411
18.4.15 MySQL MylSAM索引键缓存 413
18.4.16 MySQL查询缓存工作过程 417
18.4.17 MySQL查看查询缓存 420
18.4.18 MySQL查询缓存开启 421
18.4.19 MySQL优化MySQL连接数 427
18.4.20 MySQL数据库损坏的修复 431