[套装书]MySQL技术大全:开发、优化与运维实战(视频教学版)+MySQL技术内幕:InnoDB存储引擎(第2版)(2册)

作者
冰河 姜承尧
丛书名
出版社
机械工业出版社
ISBN
9782012101751
简要
简介
内容简介书籍计算机书籍 ---------------------------MySQL技术大全:开发、优化与运维实战(视频教学版)--------------------------- 本书全面、系统地介绍MySQL数据库技术,主要阐述MySQL开发、优化和运维过程中的各项技术点。本书对MySQL学习者有较高的参考价值,尤其是环境搭建、优化、维护和架构等相关内容,读者稍加修改便可直接用于实际工作中。另外,作者专门为本书录制了大量的配套教学视频,可以大大提高读者的学习效率。本书共33章,分为6篇:第1篇介绍MySQL基础知识;第2篇介绍环境搭建;第3篇介绍MySQL开发;第4篇介绍MySQL优化;第5篇介绍MySQL维护;第6篇介绍MySQL架构。 本书适合想全面学习MySQL的数据库管理人员、开发人员、运维工程师、架构师阅读,也适合各大院校的学生及相关培训机构的学员阅读。另外,本书还可作为一本案头手册供相关技术人员随查随用。 ---------------------------MySQL技术内幕:InnoDB存储引擎(第2版)--------------------------- 《MySQL技术内幕:InnoDB存储引擎(第2版)》由国内资深MySQL专家亲自执笔,国内外多位数据库专家联袂推荐。作为国内唯一一本关于InnoDB的专著,本书的第1版广受好评,第2版不仅针对最新的MySQL 5.6对相关内容进行了全面的补充,还根据广大读者的反馈意见对第1版中存在的不足进行了完善,全书大约重写了50%的内容。本书从源代码的角度深度解析了InnoDB的体系结构、实现原理、工作机制,并给出了大量最佳实践,能帮助你系统而深入地掌握InnoDB,更重要的是,它能为你设计管理高性能、高可用的数据库系统提供绝佳的指导。 全书一共10章,首先宏观地介绍了MySQL的体系结构和各种常见的存储引擎以及它们之间的比较;接着以InnoDB的内部实现为切入点,逐一详细讲解了InnoDB存储引擎内部的各个功能模块的实现原理,包括InnoDB存储引擎的体系结构、内存中的数据结构、基于InnoDB存储引擎的表和页的物理存储、索引与算法、文件、锁、事务、备份与恢复,以及InnoDB的性能调优等重要的知识;最后对InnoDB存储引擎源代码的编译和调试做了介绍,对大家阅读和理解InnoDB的源代码有重要的指导意义。 《MySQL技术内幕:InnoDB存储引擎(第2版)》适合所有希望构建和管理高性能、高可用性的MySQL数据库系统的开发者和DBA阅读。
目录



---------------------------MySQL技术大全:开发、优化与运维实战(视频教学版)---------------------------


前言
第1篇 MySQL基础
第1章 数据库概述 2
1.1 数据库的定义 2
1.1.1 数据库 2
1.1.2 数据库管理系统 2
1.1.3 数据表 3
1.1.4 数据类型 3
1.1.5 运算符 4
1.1.6 函数 4
1.1.7 主键 4
1.1.8 外键 4
1.1.9 索引 6
1.1.10 视图 6
1.1.11 存储过程 6
1.1.12 触发器 6
1.1.13 存储引擎 7
1.2 数据库的发展 7
1.2.1 人工管理阶段 7
1.2.2 文件系统阶段 7
1.2.3 数据库系统阶段 8
1.2.4 云数据库阶段 8
1.3 本章总结 8
第2章 数据库技术 9
2.1 数据库系统 9
2.2 SQL语言 11
2.2.1 SQL语言分类 11
2.2.2 ER图 12
2.2.3 SQL执行流程 14
2.3 数据库访问技术 15
2.4 本章总结 16
第3章 MySQL数据库 17
3.1 MySQL三大范式 17
3.1.1 第一范式 17
3.1.2 第二范式 18
3.1.3 第三范式 19
3.1.4 反范式化 19
3.2 MySQL存储引擎 20
3.2.1 查看MySQL中的存储引擎 20
3.2.2 常用存储引擎介绍 21
3.3 本章总结 23
第2篇 环境搭建
第4章 安装三大操作系统 26
4.1 安装VMware虚拟机 26
4.1.1 下载VMware虚拟机 26
4.1.2 安装VMware虚拟机步骤 30
4.2 安装Windows操作系统 31
4.2.1 下载Windows操作系统 31
4.2.2 设置VMware虚拟机 33
4.2.3 安装Windows操作系统步骤 38
4.3 安装Mac OS X操作系统 44
4.3.1 设置VMware虚拟机 45
4.3.2 安装Mac OS X操作系统步骤 46
4.4 安装CentOS操作系统 55
4.4.1 下载CentOS操作系统 55
4.4.2 设置VMware虚拟机 56
4.4.3 安装CentOS操作系统步骤 56
4.5 本章总结 65
第5章 服务器基础配置 66
5.1 配置CentOS 6.8服务器环境 66
5.1.1 修改主机名 66
5.1.2 配置静态IP地址 69
5.1.3 配置主机名和IP地址的映射关系 71
5.1.4 配置防火墙规则 71
5.1.5 配置root用户SSH免密码登录 73
5.2 添加mysql用户身份 75
5.2.1 添加mysql用户组和用户 75
5.2.2 赋予mysql用户权限 75
5.2.3 赋予mysql用户sudo权限 76
5.2.4 赋予mysql用户登录密码 76
5.2.5 配置mysql用户SSH免密码登录 76
5.3 本章总结 77
第6章 搭建MySQL环境 78
6.1 基于MSI文件安装Windows版本的MySQL 78
6.1.1 下载MySQL的MSI安装包 78
6.1.2 基于MSI文件安装MySQL 80
6.1.3 配置MySQL系统环境变量 90
6.1.4 测试MySQL 92
6.2 基于ZIP文件安装Windows版本的MySQL 92
6.2.1 下载MySQL的ZIP安装包 92
6.2.2 基于ZIP文件安装MySQL 94
6.2.3 配置MySQL系统环境变量 96
6.2.4 测试MySQL 97
6.3 基于DMG文件安装Mac OS X版本的MySQL 98
6.3.1 下载MySQL的DMG安装包 98
6.3.2 基于DMG文件安装MySQL 100
6.3.3 配置MySQL系统环境变量 102
6.3.4 测试MySQL 104
6.4 基于GZ文件安装Mac OS X版本的MySQL 105
6.4.1 下载MySQL的GZ安装包 105
6.4.2 基于GZ文件安装MySQL 105
6.4.3 配置MySQL系统环境变量 107
6.4.4 测试MySQL 107
6.5 基于RPM文件安装CentOS版本的MySQL 109
6.5.1 删除CentOS 6.8服务器自带的MySQL 109
6.5.2 下载MySQL的RPM安装包 110
6.5.3 基于RPM文件安装MySQL 111
6.5.4 测试MySQL 113
6.6 基于源码安装CentOS版本的MySQL 114
6.6.1 环境准备 115
6.6.2 下载软件包 116
6.6.3 升级gcc和cmake 117
6.6.4 编译安装MySQL源码 119
6.6.5 配置MySQL 120
6.6.6 初始化并启动MySQL服务 123
6.6.7 测试MySQL 123
6.6.8 编译安装MySQL的boost源码 124
6.7 遇到的问题和解决方案 125
6.8 本章总结 126
第3篇 MySQL开发
第7章 MySQL操作数据库 128
7.1 创建数据库 128
7.1.1 使用CREATE DATABASE语句创建数据库 128
7.1.2 使用CREATE DATABASE IF NOT EXISTS语句创建数据库 129
7.2 查看数据库 130
7.2.1 查看MySQL中存在的数据库 130
7.2.2 查看MySQL命令行所在的数据库 131
7.2.3 查看数据库的创建信息 131
7.3 修改数据库名称 132
7.3.1 通过重命名数据表修改数据库名称 132
7.3.2 通过导入/导出数据修改数据库名称 133
7.3.3 通过创建数据表修改数据库名称 134
7.4 数据库编码 135
7.4.1 创建数据库时指定字符编码 135
7.4.2 修改数据库的字符编码 136
7.5 删除数据库 136
7.6 本章总结 137
第8章 MySQL操作数据表 138
8.1 创建数据表 138
8.1.1 创建空数据表 138
8.1.2 创建数据表时指定主键 141
8.1.3 创建数据表时指定外键 142
8.1.4 创建数据表时指定字段非空 144
8.1.5 创建数据表时指定默认值 144
8.1.6 创建数据表时指定主键默认递增 145
8.1.7 创建数据表时指定存储引擎 146
8.1.8 创建数据表时指定编码 146
8.2 查看数据表结构 147
8.2.1 使用DESCRIBE/DESC语句查看表结构 147
8.2.2 使用SHOW CREATE TABLE语句查看表结构 148
8.3 修改数据表 149
8.3.1 修改数据表名称 150
8.3.2 添加字段 150
8.3.3 添加字段时指定位置 151
8.3.4 修改字段名称 153
8.3.5 修改字段的数据类型 154
8.3.6 修改字段的位置 154
8.3.7 删除字段 156
8.3.8 修改已有表的存储引擎 157
8.3.9 取消数据表的外键约束 158
8.4 删除数据表 158
8.4.1 删除没有关联关系的数据表 158
8.4.2 删除有外键约束的主表 160
8.5 MySQL中的临时表 160
8.5.1 创建临时表 161
8.5.2 删除临时表 161
8.6 本章总结 162
第9章 MySQL数据类型 163
9.1 数值类型 163
9.1.1 整数类型 163
9.1.2 浮点数类型 168
9.1.3 定点数类型 171
9.2 日期和时间类型 173
9.2.1 YEAR类型 174
9.2.2 TIME类型 176
9.2.3 DATE类型 178
9.2.4 DATETIME类型 181
9.2.5 TIMESTAMP类型 183
9.3 文本字符串类型 186
9.3.1 文本字符串类型概述 186
9.3.2 CHAR与VARCHAR类型 187
9.3.3 TEXT类型 188
9.3.4 ENUM类型 189
9.3.5 SET类型 191
9.3.6 JSON类型 192
9.4 二进制字符串类型 193
9.4.1 二进制字符串类型概述 193
9.4.2 BIT类型 194
9.4.3 BINARY与VARBINARY类型 195
9.4.4 BLOB类型 196
9.5 本章总结 196
第10章 MySQL运算符 197
10.1 算术运算符 197
10.1.1 MySQL支持的算术运算符 197
10.1.2 算术运算符简单示例 198
10.2 比较运算符 199
10.2.1 MySQL支持的比较运算符 199
10.2.2 比较运算符简单示例 201
10.3 逻辑运算符 206
10.3.1 MySQL支持的逻辑运算符 206
10.3.2 逻辑运算符简单示例 206
10.4 位运算符 208
10.4.1 MySQL支持的位运算符 208
10.4.2 位运算符简单示例 208
10.5 运算符的优先级 210
10.6 本章总结 211
第11章 MySQL函数 212
11.1 MySQL函数简介 212
11.2 数学函数 213
11.2.1 绝对值函数 213
11.2.2 圆周率函数 213
11.2.3 获取整数的函数 213
11.2.4 返回列表中的最大值与最小值函数 214
11.2.5 角度与弧度互换函数 215
11.2.6 三角函数 215
11.2.7 乘方与开方函数 217
11.2.8 对数函数 218
11.2.9 随机函数 219
11.2.10 四舍五入与数字截取函数 220
11.2.11 符号函数 221
11.2.12 数学运算函数 221
11.3 字符串函数 222
11.3.1 ASCII(S)函数 222
11.3.2 CHAR_LENGTH(S)函数 222
11.3.3 LENGTH(S)函数 223
11.3.4 CONCAT(S1,S2,…,Sn)函数 223
11.3.5 CONCAT_WS(X, S1,S2,…,Sn)函数 223
11.3.6 INSERT(oldstr, x, y, replacestr)函数 224
11.3.7 LOWER(S)函数 224
11.3.8 UPPER(S)函数 225
11.3.9 LEFT(str, x)函数 225
11.3.10 RIGHT(str, x)函数 225
11.3.11 LPAD(str, n pstr)函数 226
11.3.12 RPAD(str, n, pstr)函数 226
11.3.13 LTRIM(S)函数 226
11.3.14 RTRIM(S)函数 226
11.3.15 TRIM(S)函数 227
11.3.16 TRIM(substr FROM str)函数 227
11.3.17 REPEAT(str, x)函数 227
11.3.18 REPLACE(S,A,B)函数 227
11.3.19 STRCMP(S1, S2)函数 228
11.3.20 SUBSTR(S, X, Y)函数 228
11.3.21 MID(S, X, Y)函数 228
11.3.22 SPACE(X)函数 229
11.3.23 LOCATE(substr, str)函数 229
11.3.24 ELT(M, S1, S2, …, Sn)函数 230
11.3.25 FIELD(S,S1,S2,…,Sn)函数 230
11.3.26 FIND_IN_SET(S1, S2)函数 230
11.3.27 REVERSE(S)函数 231
11.3.28 NULLIF(value1, value2)函数 231
11.4 日期和时间函数 231
11.4.1 CURDATE()函数 232
11.4.2 CURTIME()函数 232
11.4.3 NOW()函数 232
11.4.4 UNIX_TIMESTAMP(date)函数 233
11.4.5 FROM_UNIXTIME(timestamp)函数 233
11.4.6 UTC_DATE()函数 233
11.4.7 UTC_TIME()函数 234
11.4.8 YEAR(date)函数 234
11.4.9 MONTH(date)函数 234
11.4.10 MONTHNAME(date)函数 235
11.4.11 DAY(date)函数 235
11.4.12 DAYNAME(date)函数 235
11.4.13 DAYOFWEEK(date)函数 235
11.4.14 WEEKDAY(date)函数 236
11.4.15 WEEK(date)函数 236
11.4.16 WEEKOFYEAR(date)函数 236
11.4.17 DAYOFYEAR(date)函数 237
11.4.18 DAYOFMONTH(date)函数 237
11.4.19 QUARTER(date)函数 237
11.4.20 HOUR(time)函数 237
11.4.21 MINUTE(time)函数 238
11.4.22 SECOND(time)函数 238
11.4.23 EXTRACT(type FROM date)函数 238
11.4.24 TIME_TO_SEC(time)函数 239
11.4.25 SEC_TO_TIME(seconds)函数 240
11.4.26 DATE_ADD(date, INTERVAL expr type)函数 240
11.4.27 DATE_SUB(date, INTERVAL expr type)函数 241
11.4.28 ADDTIME(time1, time2)函数 241
11.4.29 SUBTIME(time1, time2)函数 242
11.4.30 DATEDIFF(date1, date2)函数 242
11.4.31 FROM_DAYS(N)函数 242
11.4.32 LAST_DAY(date)函数 243
11.4.33 MAKEDATE(year, n)函数 243
11.4.34 MAKETIME(hour, minute, second)函数 243
11.4.35 PERIOD_ADD(time, n)函数 244
11.4.36 TO_DAYS(date)函数 244
11.4.37 DATE_FORMAT(date, format)函数 244
11.4.38 TIME_FORMAT(time, format)函数 245
11.4.39 GET_FORMAT(date_type, format_type)函数 246
11.4.40 STR_TO_DATE(str, format)函数 246
11.5 流程处理函数 247
11.5.1 IF(value, value1,value2)函数 247
11.5.2 IFNULL(value1, value2)函数 247
11.5.3 CASE WHEN THEN函数 247
11.5.4 CASE expr WHEN函数 248
11.6 加密与解密函数 248
11.6.1 PASSWORD(value)函数 249
11.6.2 MD5(value)函数 249
11.6.3 ENCODE(value, password_seed)函数 249
11.6.4 DECODE(value, password_seed)函数 249
11.7 聚合函数 250
11.7.1 COUNT(*/字段名称)函数 250
11.7.2 MAX(字段名称)函数 251
11.7.3 MIN(字段名称)函数 251
11.7.4 SUM(字段名称)函数 251
11.7.5 AVG(字段名称)函数 251
11.8 获取MySQL信息函数 252
11.8.1 VERSION()函数 252
11.8.2 CONNECTION_ID()函数 252
11.8.3 DATABASE()函数 252
11.8.4 USER()函数 253
11.8.5 LAST_INSERT_ID()函数 253
11.8.6 CHARSET(value)函数 254
11.8.7 COLLATION(value)函数 254
11.9 加锁与解锁函数 254
11.9.1 GET_LOCK(value, timeout)函数 254
11.9.2 RELEASE_LOCK(value)函数 255
11.9.3 IS_FREE_LOCK(value)函数 255
11.9.4 IS_USED_LOCK(value)函数 255
11.10 JSON函数 256
11.10.1 JSON_CONTAINS(json_doc, value)函数 256
11.10.2 JSON_SEARCH(json_doc ->> '$[*].key', type, value)函数 257
11.10.3 JSON_PRETTY(json_doc)函数 257
11.10.4 JSON_DEPTH(json_doc)函数 257
11.10.5 JSON_LENGTH(json_doc[, path])函数 258
11.10.6 JSON_KEYS(json_doc[, path])函数 258
11.10.7 JSON_INSERT(json_doc, path, val[, path, val] ...)函数 258
11.10.8 JSON_REMOVE(json_doc, path[, path] ...)函数 259
11.10.9 JSON_REPLACE(json_doc, path, val[, path, val] ...)函数 259
11.10.10 JSON_SET(json_doc, path, val[, path, val] ...)函数 260
11.10.11 JSON_TYPE(json_val)函数 261
11.10.12 JSON_VALID(value)函数 261
11.11 窗口函数 261
11.11.1 序号函数 263
11.11.2 分布函数 264
11.11.3 前后函数 265
11.11.4 首尾函数 267
11.11.5 其他函数 268
11.12 MySQL的其他函数 269
11.12.1 FORMAT(value, n)函数 269
11.12.2 CONV(value, from, to)函数 269
11.12.3 INET_ATON(value)函数 270
11.12.4 INET_NTOA(value)函数 270
11.12.5 BENCHMARK(n, expr)函数 270
11.12.6 CAST(value AS type)函数 271
11.12.7 CONVERT(value USING char_code)函数 271
11.13 本章总结 272
第12章 MySQL数据变更 273
12.1 数据插入 273
12.1.1 数据插入规则 273
12.1.2 插入完整的行记录 274
12.1.3 指定字段插入数据 275
12.1.4 一次插入多条数据记录 276
12.1.5 将查询结果插入另一个表中 278
12.2 数据更新 280
12.2.1 更新数据表中的所有记录 281
12.2.2 更新表中特定的数据行 281
12.2.3 更新某个范围内的数据 282
12.2.4 更新符合正则表达式的数据 285
12.3 数据删除 286
12.3.1 删除数据表中特定的数据 286
12.3.2 删除某个范围内的数据 286
12.3.3 删除符合正则表达式的数据 289
12.3.4 删除数据表中的所有数据 289
12.4 本章总结 289
第13章 MySQL数据查询 290
13.1 数据准备 290
13.2 SELECT查询语句 291
13.2.1 查询表中所有字段的数据 291
13.2.2 查询表中单个字段的数据 293
13.2.3 查询表中指定字段的数据 294
13.2.4 使用完全限定字段名查询数据 294
13.2.5 使用完全限定表名查询数据 295
13.3 WHERE条件语句 296
13.3.1 WHERE语句语法格式 296
13.3.2 查询单一的特定数据 296
13.3.3 查询某个范围内的数据 297
13.3.4 IN和NOT IN条件语句 297
13.3.5 BETWEEN AND条件语句 298
13.3.6 LIKE条件语句 299
13.3.7 空值条件限制语句 300
13.3.8 AND语句 302
13.3.9 OR语句 303
13.3.10 DISTINCT语句 303
13.3.11 ORDER BY语句 304
13.3.12 GROUP BY语句 306
13.3.13 HAVING语句 308
13.3.14 WITH ROLLUP语句 308
13.3.15 对数据同时进行分组与排序 308
13.3.16 LIMIT语句 309
13.4 数据聚合查询 310
13.4.1 查询数据的总行数 310
13.4.2 查询某列数据的总和 311
13.4.3 查询某列数据的最小值 312
13.4.4 查询某列数据的最大值 312
13.4.5 查询某列数据的平均值 313
13.5 JOIN语句 314
13.5.1 INNER JOIN语句 314
13.5.2 LEFT JOIN语句 315
13.5.3 RIGHT JOIN语句 316
13.5.4 CROSS JOIN 语句 317
13.5.5 使用复合连接条件查询数据 317
13.6 子查询语句 318
13.6.1 ANY子查询 318
13.6.2 ALL子查询 319
13.6.3 EXISTS子查询 319
13.6.4 NOT EXISTS子查询 320
13.6.5 IN子查询 320
13.6.6 NOT IN子查询 321
13.6.7 子查询作为结果字段 321
13.7 UNION联合语句 322
13.7.1 UNION语句 322
13.7.2 UNION ALL语句 323
13.8 使用别名查询数据 323
13.8.1 为字段名指定别名 323
13.8.2 为表名指定别名 324
13.8.3 同时为字段名和表名指定别名 325
13.9 使用正则表达式查询数据 325
13.10 本章总结 326
第14章 MySQL索引 327
14.1 索引简介 327
14.1.1 MySQL遍历表的方式 327
14.1.2 索引的优点与缺点 328
14.1.3 索引的创建原则 328
14.2 索引的使用场景 329
14.2.1 适合创建索引的场景 329
14.2.2 不适合创建索引的场景 330
14.3 创建数据表时创建索引 330
14.3.1 语法格式 330
14.3.2 创建普通索引 331
14.3.3 创建唯一索引 332
14.3.4 创建主键索引 333
14.3.5 创建单列索引 333
14.3.6 创建组合索引 334
14.3.7 创建全文索引 337
14.3.8 创建空间索引 338
14.4 为已有数据表添加索引 338
14.4.1 语法格式 339
14.4.2 创建普通索引 339
14.4.3 创建唯一索引 340
14.4.4 创建主键索引 341
14.4.5 创建单列索引 342
14.4.6 创建组合索引 343
14.4.7 创建全文索引 344
14.4.8 创建空间索引 345
14.5 删除索引 347
14.5.1 语法格式 347
14.5.2 删除索引方式 347
14.6 隐藏索引 348
14.6.1 隐藏索引概述 349
14.6.2 语法格式 349
14.6.3 创建测试表 349
14.6.4 索引操作 350
14.7 降序索引 355
14.7.1 降序索引概述 355
14.7.2 降序索引操作 355
14.8 函数索引 359
14.8.1 函数索引概述 359
14.8.2 函数索引操作 359
14.9 本章总结 363
第15章 MySQL视图 364
15.1 视图概述 364
15.1.1 视图的概念 364
15.1.2 视图的优点 364
15.2 创建视图 365
15.2.1 语法格式 365
15.2.2 创建单表视图 366
15.2.3 创建多表联合视图 369
15.3 查看视图 370
15.3.1 使用SHOW TABLES语句查看视图 370
15.3.2 使用DESCRIBE/DESC语句查看视图 371
15.3.3 使用SHOW TABLE STATUS语句查看视图 371
15.3.4 使用SHOW CREATE VIEW语句查看视图 373
15.3.5 查看views数据表中的视图信息 373
15.4 修改视图的结构 374
15.4.1 使用CREATE OR REPLACE VIEW语句修改视图结构 374
15.4.2 使用ALTER语句修改视图结构 375
15.5 更新视图的数据 376
15.5.1 直接更新视图数据 376
15.5.2 间接更新视图数据 379
15.6 删除视图 381
15.7 本章总结 382
第16章 存储过程和函数 383
16.1 存储过程和函数简介 383
16.1.1 什么是存储过程和函数 383
16.1.2 存储过程和函数的使用场景 384
16.1.3 存储过程和函数的优点 384
16.2 创建存储过程和函数 386
16.2.1 创建存储过程 386
16.2.2 创建存储函数 388
16.3 查看存储过程和函数 389
16.3.1 查看存储过程和函数的创建或定义信息 389
16.3.2 查看存储过程和函数的状态信息 390
16.3.3 从数据库中查看存储过程和函数的信息 391
16.4 修改存储过程和函数 394
16.4.1 修改存储过程 394
16.4.2 修改存储函数 395
16.5 调用存储过程和函数 396
16.5.1 调用存储过程 396
16.5.2 调用存储函数 397
16.6 删除存储过程和函数 398
16.6.1 删除存储过程 398
16.6.2 删除存储函数 398
16.7 MySQL中使用变量 399
16.7.1 定义变量 399
16.7.2 变量赋值 400
16.8 MySQL中使用变量案例 401
16.8.1 在存储过程中使用变量 401
16.8.2 在函数中使用变量 402
16.9 定义条件和处理程序 403
16.9.1 定义条件 403
16.9.2 定义处理程序 404
16.10 定义条件和处理程序案例 405
16.10.1 在存储过程中未定义条件和处理程序 406
16.10.2 在存储过程中定义条件和处理程序 407
16.10.3 在函数中未定义条件和处理程序 408
16.10.4 在函数中定义条件和处理程序 409
16.11 MySQL中游标的使用 410
16.11.1 声明游标 410
16.11.2 打开游标 410
16.11.3 使用游标 411
16.11.4 关闭游标 411
16.12 MySQL中游标的使用案例 412
16.12.1 在存储过程中使用游标 412
16.12.2 在函数中使用游标 413
16.13 MySQL中控制流程的使用 414
16.13.1 使用IF语句控制流程 414
16.13.2 使用CASE语句控制流程 415
16.13.3 使用LOOP语句控制流程 417
16.13.4 使用LEAVE语句控制流程 418
16.13.5 使用ITERATE语句控制流程 418
16.13.6 使用REPEAT语句控制流程 419
16.13.7 使用WHILE语句控制流程 420
16.14 本章总结 421
第17章 MySQL触发器 422
17.1 创建触发器 422
17.1.1 语法格式 422
17.1.2 创建触发器示例 423
17.2 查看触发器 425
17.2.1 使用SHOW TRIGGERS语句查看触发器的信息 425
17.2.2 使用SHOW CREATE TRIGGER语句查看触发器的信息 426
17.2.3 通过查看triggers数据表中的数据查看触发器的信息 427
17.3 删除触发器 429
17.3.1 语法格式 429
17.3.2 删除触发器示例 429
17.4 本章小结 429
第18章 MySQL分区 430
18.1 分区介绍 430
18.1.1 不同版本MySQL的分区 430
18.1.2 分区的优势 432
18.1.3 分区类型 433
18.2 RANGE分区 434
18.2.1 创建分区表 434
18.2.2 添加分区 437
18.2.3 删除分区 438
18.2.4 重定义分区 440
18.3 LIST分区 442
18.3.1 创建分区表 442
18.3.2 添加分区 443
18.3.3 删除分区 444
18.3.4 重定义分区 444
18.4 COLUMNS分区 445
18.4.1 RANGE COLUMNS分区 446
18.4.2 LIST COLUMNS分区 447
18.5 HASH分区 448
18.5.1 创建分区表 448
18.5.2 添加分区 449
18.5.3 合并分区 450
18.6 KEY分区 451
18.7 子分区 452
18.8 分区中的NULL值处理 452
18.8.1 RANGE分区中的NULL值 452
18.8.2 LIST分区中的NULL值 453
18.8.3 HASH分区与KEY分区中的NULL值 454
18.9 本章总结 455
第19章 MySQL公用表表达式和生成列 456
19.1 公用表表达式 456
19.1.1 非递归CTE 456
19.1.2 递归CTE 457
19.1.3 递归CTE的限制 459
19.2 生成列 461
19.2.1 创建表时指定生成列 462
19.2.2 为已有表添加生成列 463
19.2.3 修改已有的生成列 464
19.2.4 删除生成列 464
19.3 本章总结 465
第4篇 MySQL优化
第20章 MySQL查询优化 468
20.1 SHOW STATUS语句解析 468
20.2 EXPLAIN语句解析 469
20.3 SHOW PROFILE语句解析 477
20.3.1 分析InnoDB数据表 478
20.3.2 分析MyISAM数据表 480
20.3.3 分析MySQL源码 481
20.4 pt-query-digest分析查询 482
20.5 优化子查询 483
20.6 本章总结 483
第21章 MySQL索引优化 484
21.1 索引的类型 484
21.2 使用索引的场景 485
21.2.1 全值匹配 485
21.2.2 查询范围 486
21.2.3 匹配最左前缀 486
21.2.4 查询索引列 487
21.2.5 匹配字段前缀 487
21.2.6 精确与范围匹配索引 488
21.2.7 匹配NULL值 488
21.2.8 连接查询匹配索引 489
21.2.9 LIKE匹配索引 490
21.3 无法使用索引的场景 490
21.3.1 以通配符开始的LIKE语句 490
21.3.2 数据类型转换 491
21.3.3 联合索引未匹配最左列 491
21.3.4 OR语句 492
21.3.5 计算索引列 492
21.3.6 范围条件右侧的列无法使用索引 493
21.3.7 使用或!=操作符匹配查询条件 493
21.3.8 匹配NOT NULL值 493
21.3.9 索引耗时 494
21.4 使用索引提示 494
21.4.1 使用索引 494
21.4.2 忽略索引 495
21.4.3 强制使用索引 495
21.5 使用生成列为JSON建立索引 496
21.6 本章总结 497
第22章 SQL语句优化 498
22.1 嵌套查询的优化 498
22.2 OR条件语句的优化 500
22.3 ORDER BY语句的优化 501
22.4 GROUP BY语句的优化 502
22.5 分页查询的优化 503
22.5.1 回表查询优化分页 503
22.5.2 记录数据标识优化分页 504
22.6 插入数据的优化 505
22.6.1 MyISAM数据表插入数据的优化 505
22.6.2 InnoDB数据表插入数据的优化 506
22.7 删除数据的优化 506
22.8 本章总结 507
第23章 数据库优化 508
23.1 优化数据类型 508
23.1.1 使用数据类型的基本原则 508
23.1.2 优化表中的数据类型 509
23.2 删除重复索引和冗余索引 511
23.2.1 创建测试索引 511
23.2.2 使用pt-duplicate-key-checker删除重复索引和冗余索引 511
23.2.3 使用mysqlindexcheck删除重复索引和冗余索引 513
23.3 反范式化设计 514
23.4 增加中间表 515
23.5 分析数据表 517
23.6 检查数据表 518
23.7 优化数据表 518
23.8 拆分数据表 519
23.8.1 垂直拆分数据表 519
23.8.2 水平拆分数据表 520
23.9 本章总结 520
第24章 MySQL服务器优化 521
24.1 MySQL服务器硬件的优化 521
24.1.1 优化硬件配置 521
24.1.2 系统内核优化 522
24.2 MySQL配置项的优化 523
24.3 本章总结 524
第25章 应用程序优化 525
25.1 复用数据库连接 525
25.2 减少数据访问 526
25.3 开启查询缓存 527
25.4 使用外部缓存 528
25.5 使用分布式MySQL架构 529
25.6 本章总结 529
第26章 MySQL的其他优化选项 530
26.1 使用performance_schema数据库分析MySQL 530
26.1.1 查看MySQL是否支持performance_schema 530
26.1.2 开启或关闭performance_schema 532
26.1.3 performance_schema的简单配置与使用 532
26.2 使用sys数据库分析MySQL 535
26.2.1 sys数据库概述 535
26.2.2 sys数据库的常用查询 535
26.3 MySQL 8.x中的资源组 538
26.3.1 开启 CAP_SYS_NICE 538
26.3.2 创建资源组 539
26.3.3 查看资源组 540
26.3.4 绑定资源组 540
26.3.5 修改资源组 542
26.3.6 开启与禁用资源组 542
26.3.7 删除资源组 543
26.4 本章总结 544
第5篇 MySQL运维
第27章 MySQL命令行工具 546
27.1 查看MySQL命令 546
27.2 mysql命令 547
27.2.1 登录MySQL终端 547
27.2.2 设置客户端连接编码 549
27.2.3 直接执行SQL语句 550
27.2.4 格式化输出结果 550
27.2.5 SQL报错处理 551
27.3 mysqladmin命令 552
27.3.1 mysqladmin命令参数 553
27.3.2 mysqladmin命令简单示例 553
27.4 myisampack命令 554
27.5 mysqlbinlog命令 555
27.6 mysqlcheck命令 558
27.7 mysqlshow命令 559
27.8 mysqldump命令 561
27.9 mysqlimport命令 563
27.10 本章总结 564
第28章 MySQL日志 565
28.1 查询日志 565
28.1.1 开启查询日志 565
28.1.2 查看查询日志 566
28.1.3 删除查询日志 567
28.1.4 关闭查询日志 568
28.2 慢查询日志 568
28.2.1 开启慢查询日志 568
28.2.2 查看慢查询日志 569
28.2.3 删除慢查询日志 570
28.2.4 关闭慢查询日志 571
28.3 错误日志 571
28.3.1 开启错误日志 571
28.3.2 查看错误日志 572
28.3.3 删除错误日志 572
28.3.4 关闭错误日志 573
28.4 二进制日志 573
28.4.1 开启二进制日志 573
28.4.2 查看二进制日志 574
28.4.3 删除二进制日志 575
28.4.4 暂时停止与开启二进制日志 577
28.4.5 关闭二进制日志 577
28.5 本章总结 577
第29章 数据备份与恢复 578
29.1 基于mysqldump备份并恢复数据 578
29.1.1 备份数据 578
29.1.2 恢复数据 581
29.2 基于mysqlpump备份并恢复数据 582
29.3 基于mydumper备份并恢复数据 583
29.3.1 安装mydumper 583
29.3.2 备份数据 584
29.3.3 恢复数据 588
29.4 基于mysqlhotcopy备份并恢复数据 589
29.4.1 安装mysqlhotcopy 589
29.4.2 备份数据 590
29.4.3 恢复数据 590
29.5 基于xtrabackup备份并恢复数据 590
29.5.1 安装xtrabackup 590
29.5.2 备份数据 591
29.5.3 恢复准备 593
29.5.4 恢复数据 594
29.6 数据备份与恢复案例 596
29.6.1 完全恢复数据案例 596
29.6.2 基于位置点恢复数据案例 598
29.6.3 基于时间点恢复数据案例 598
29.7 MySQL灾难恢复 598
29.7.1 问题重现 599
29.7.2 问题分析 599
29.7.3 问题解决 600
29.8 实现数据库的自动备份 602
29.9 导出数据 603
29.9.1 使用SELECT INTO OUTFILE语句导出数据 603
29.9.2 使用mysqldump命令导出数据 605
29.9.3 使用mysql命令导出数据 606
29.10 导入数据 607
29.10.1 使用LOAD DATA INFILE导入数据 608
29.10.2 使用mysqlimport导入数据 609
29.11 遇到的问题和解决方案 610
29.12 本章总结 611
第30章 MySQL账户管理 612
30.1 MySQL中的权限表 612
30.2 创建普通用户 613
30.2.1 使用CREATE USER语句创建用户 613
30.2.2 使用GRANT语句创建用户 617
30.2.3 操作user数据表创建用户 619
30.3 为用户授权 620
30.3.1 权限层级 620
30.3.2 使用GRANT语句为用户授权 621
30.3.3 通过操作权限表为用户授权 624
30.4 查看用户权限 624
30.4.1 通过SHOW GRANTS FOR语句查看用户权限 624
30.4.2 通过查询mysql.user数据表查看用户权限 625
30.4.3 通过查询information_schema数据库查看用户权限 625
30.5 修改用户权限 626
30.5.1 使用GRANT语句修改用户权限 626
30.5.2 通过操作数据表修改用户权限 627
30.6 撤销用户权限 628
30.6.1 使用REVOKE语句撤销用户权限 628
30.6.2 通过操作数据表撤销用户权限 629
30.7 修改用户密码 630
30.7.1 通过mysqladmin修改用户密码 630
30.7.2 使用SET PASSWORD语句修改用户密码 630
30.7.3 使用GRANT语句修改用户密码 631
30.7.4 通过操作user数据表修改用户密码 632
30.7.5 忘记root密码的解决方案 632
30.8 删除用户 633
30.8.1 使用DROP USER语句删除用户 633
30.8.2 使用DELETE语句删除用户 634
30.9 限制用户使用资源 634
30.9.1 限制用户使用资源示例 634
30.9.2 修改用户的资源限制 635
30.9.3 解除用户的资源限制 635
30.10 MySQL 8.x版本中的账户管理 636
30.10.1 用户创建和授权 636
30.10.2 认证插件更新 636
30.10.3 密码管理 638
30.10.4 角色管理 640
30.11 本章总结 644
第6篇 MySQL架构
第31章 MySQL复制 646
31.1 搭建MySQL主从复制环境 646
31.1.1 服务器规划 646
31.1.2 搭建MySQL主从环境 647
31.1.3 测试MySQL主从复制环境 650
31.2 搭建MySQL主主复制环境 652
31.2.1 服务器规划 652
31.2.2 将MySQL主从环境切换为主主环境 652
31.2.3 直接搭建MySQL主主环境 654
31.2.4 测试MySQL主主复制环境 654
31.3 添加MySQL从库 655
31.3.1 服务器规划 655
31.3.2 在主从服务器上进行的操作 656
31.3.3 测试MySQL主从复制环境 658
31.4 切换主从复制到链式复制 659
31.4.1 服务器规划 659
31.4.2 切换复制模式 660
31.5 切换链式复制到主从复制 662
31.6 搭建MySQL多源复制环境 665
31.6.1 服务器规划 665
31.6.2 搭建MySQL多源复制环境 666
31.6.3 测试MySQL多源复制环境 667
31.7 添加复制过滤器 668
31.7.1 复制指定的数据库 669
31.7.2 忽略指定的数据库 669
31.7.3 复制指定的数据表 670
31.7.4 忽略指定的数据表 670
31.8 设置延迟复制 671
31.9 基于GTID搭建MySQL主从复制环境 671
31.10 基于半同步模式搭建MySQL主从复制环境 673
31.10.1 半同步参数说明 673
31.10.2 配置半同步复制 674
31.10.3 测试半同步复制 676
31.11 本章总结 677
第32章 MySQL读写分离 678
32.1 基于MySQL Proxy实现读写分离 678
32.1.1 服务器规划 678
32.1.2 安装Lua环境 679
32.1.3 安装MySQL Proxy 679
32.1.4 配置MySQL Proxy读写分离 680
32.1.5 启动MySQL Proxy 683
32.1.6 测试MySQL Proxy的读写分离 683
32.2 基于Atlas实现读写分离 685
32.2.1 服务器规划 685
32.2.2 安装Atlas 685
32.2.3 配置Atlas读写分离 686
32.2.4 启动Atlas 687
32.2.5 测试Atlas读写分离 689
32.3 基于ProxySQL实现读写分离 689
32.3.1 服务器规划 689
32.3.2 安装ProxySQL 690
32.3.3 配置ProxySQL读写分离 690
32.3.4 测试ProxySQL读写分离 695
32.4 基于Amoeba实现读写分离 695
32.4.1 服务器规划 695
32.4.2 安装JDK 695
32.4.3 安装Amoeba 696
32.4.4 配置Amoeba读写分离 697
32.4.5 启动Amoeba 699
32.4.6 测试Amoeba读写分离 700
32.5 基于Mycat实现读写分离 700
32.5.1 服务器规划 701
32.5.2 安装JDK 701
32.5.3 安装Mycat 701
32.5.4 配置Mycat读写分离 702
32.5.5 启动Mycat 703
32.5.6 测试Mycat读写分离 704
32.6 本章总结 704
第33章 MySQL HA高可用架构 705
33.1 基于Keepalived搭建MySQL高可用环境 705
33.1.1 服务器规划 705
33.1.2 安装Keepalived 706
33.1.3 配置MySQL高可用 707
33.1.4 测试MySQL高可用 710
33.1.5 自动重启MySQL 711
33.2 基于HAProxy搭建Mycat高可用环境 713
33.2.1 服务器规划 713
33.2.2 安装Mycat状态检查服务 713
33.2.3 安装HAProxy服务 715
33.2.4 配置Mycat负载均衡 716
33.2.5 测试Mycat高可用环境 719
33.3 基于Keepalived搭建HAProxy高可用环境 721
33.3.1 服务器规划 721
33.3.2 安装并配置HAProxy和Keepalived 721
33.3.3 配置HAProxy高可用性 722
33.3.4 测试HAProxy高可用性 725
33.4 本章总结 726
参考文献 727



---------------------------MySQL技术内幕:InnoDB存储引擎(第2版)---------------------------


《MySQL技术内幕:InnoDB存储引擎(第2版)》
推荐序
前言
第1章 MySQL体系结构和存储引擎1
1.1 定义数据库和实例1
1.2 MySQL体系结构3
1.3 MySQL存储引擎5
1.3.1 InnoDB存储引擎6
1.3.2 MyISAM存储引擎7
1.3.3 NDB存储引擎7
1.3.4 Memory存储引擎8
1.3.5 Archive存储引擎9
1.3.6 Federated存储引擎9
1.3.7 Maria存储引擎9
1.3.8 其他存储引擎9
1.4 各存储引擎之间的比较10
1.5 连接MySQL13
1.5.1 TCP/IP13
1.5.2 命名管道和共享内存15
1.5.3 UNIX域套接字15
1.6 小结15
第2章 InnoDB存储引擎17
2.1 InnoDB存储引擎概述17
2.2 InnoDB存储引擎的版本18
2.3 InnoDB体系架构19
2.3.1 后台线程19
2.3.2 内存22
2.4 Checkpoint技术32
2.5 Master Thread工作方式36
2.5.1 InnoDB 1.0.x版本之前的Master Thread36
2.5.2 InnoDB1.2.x版本之前的Master Thread41
2.5.3 InnoDB1.2.x版本的Master Thread45
2.6 InnoDB关键特性45
2.6.1 插入缓冲46
2.6.2 两次写53
2.6.3 自适应哈希索引55
2.6.4 异步IO57
2.6.5 刷新邻接页58
2.7 启动、关闭与恢复58
2.8 小结61
第3章 文件62
3.1 参数文件62
3.1.1 什么是参数63
3.1.2 参数类型64
3.2 日志文件65
3.2.1 错误日志66
3.2.2 慢查询日志67
3.2.3 查询日志72
3.2.4 二进制日志73
3.3 套接字文件83
3.4 pid文件83
3.5 表结构定义文件84
3.6 InnoDB存储引擎文件84
3.6.1 表空间文件85
3.6.2 重做日志文件86
3.7 小结90
第4章 表91
4.1 索引组织表91
4.2 InnoDB逻辑存储结构93
4.2.1 表空间93
4.2.2 段95
4.2.3 区95
4.2.4 页101
4.2.5 行101
4.3 InnoDB行记录格式102
4.3.1 Compact行记录格式103
4.3.2 Redundant行记录格式106
4.3.3 行溢出数据110
4.3.4 Compressed和Dynamic行记录格式117
4.3.5 CHAR的行结构存储117
4.4 InnoDB数据页结构120
4.4.1 File Header121
4.4.2 Page Header122
4.4.3 Infimum和Supremum Records123
4.4.4 User Records和Free Space123
4.4.5 Page Directory124
4.4.6 File Trailer124
4.4.7 InnoDB数据页结构示例分析125
4.5 Named File Formats机制132
4.6 约束134
4.6.1 数据完整性134
4.6.2 约束的创建和查找135
4.6.3 约束和索引的区别137
4.6.4 对错误数据的约束137
4.6.5 ENUM和SET约束139
4.6.6 触发器与约束139
4.6.7 外键约束142
4.7 视图144
4.7.1 视图的作用144
4.7.2 物化视图147
4.8 分区表152
4.8.1 分区概述152
4.8.2 分区类型155
4.8.3 子分区168
4.8.4 分区中的NULL值172
4.8.5 分区和性能176
4.8.6 在表和分区间交换数据180
4.9 小结182
第5章 索引与算法183
5.1 InnoDB存储引擎索引概述183
5.2 数据结构与算法184
5.2.1 二分查找法184
5.2.2 二叉查找树和平衡二叉树185
5.3 B+树187
5.3.1 B+树的插入操作187
5.3.2 B+树的删除操作190
5.4 B+树索引191
5.4.1 聚集索引192
5.4.2 辅助索引196
5.4.3 B+树索引的分裂200
5.4.4 B+树索引的管理202
5.5 Cardinality值210
5.5.1 什么是Cardinality210
5.5.2 InnoDB存储引擎的Cardinality统计212
5.6 B+树索引的使用215
5.6.1 不同应用中B+树索引的使用215
5.6.2 联合索引215
5.6.3 覆盖索引218
5.6.4 优化器选择不使用索引的情况219
5.6.5 索引提示221
5.6.6 Multi-Range Read优化223
5.6.7 Index Condition Pushdown(ICP)优化226
5.7 哈希算法227
5.7.1 哈希表228
5.7.2 InnoDB存储引擎中的哈希算法229
5.7.3 自适应哈希索引230
5.8 全文检索231
5.8.1 概述231
5.8.2 倒排索引232
5.8.3 InnoDB全文检索233
5.8.4 全文检索240
5.9 小结248
第6章 锁249
6.1 什么是锁249
6.2 lock与latch250
6.3 InnoDB存储引擎中的锁252
6.3.1 锁的类型252
6.3.2 一致性非锁定读258
6.3.3 一致性锁定读261
6.3.4 自增长与锁262
6.3.5 外键和锁264
6.4 锁的算法265
6.4.1 行锁的3种算法265
6.4.2 解决Phantom Problem269
6.5 锁问题271
6.5.1 脏读271
6.5.2 不可重复读273
6.5.3 丢失更新274
6.6 阻塞276
6.7 死锁278
6.7.1 死锁的概念278
6.7.2 死锁概率280
6.7.3 死锁的示例281
6.8 锁升级283
6.9 小结284
第7章 事务285
7.1 认识事务285
7.1.1 概述285
7.1.2 分类287
7.2 事务的实现294
7.2.1 redo294
7.2.2 undo305
7.2.3 purge317
7.2.4 group commit319
7.3 事务控制语句323
7.4 隐式提交的SQL语句328
7.5 对于事务操作的统计329
7.6 事务的隔离级别330
7.7 分布式事务335
7.7.1 MySQL数据库分布式事务335
7.7.2 内部XA事务340
7.8 不好的事务习惯341
7.8.1 在循环中提交341
7.8.2 使用自动提交343
7.8.3 使用自动回滚344
7.9 长事务347
7.10 小结349
第8章 备份与恢复350
8.1 备份与恢复概述350
8.2 冷备352
8.3 逻辑备份353
8.3.1 mysqldump353
8.3.2 SELECT...INTO OUTFILE360
8.3.3 逻辑备份的恢复362
8.3.4 LOAD DATA INFILE362
8.3.5 mysqlimport364
8.4 二进制日志备份与恢复366
8.5 热备367
8.5.1 ibbackup367
8.5.2 XtraBackup368
8.5.3 XtraBackup实现增量备份370
8.6 快照备份372
8.7 复制376
8.7.1 复制的工作原理376
8.7.2 快照+复制的备份架构380
8.8 小结382
第9章 性能调优383
9.1 选择合适的CPU383
9.2 内存的重要性384
9.3 硬盘对数据库性能的影响387
9.3.1 传统机械硬盘387
9.3.2 固态硬盘387
9.4 合理地设置RAID389
9.4.1 RAID类型389
9.4.2 RAID Write Back功能392
9.4.3 RAID配置工具394
9.5 操作系统的选择397
9.6 不同的文件系统对数据库性能的影响398
9.7 选择合适的基准测试工具399
9.7.1 sysbench399
9.7.2 mysql-tpcc405
9.8 小结410
第10章 InnoDB存储引擎源代码的编译和调试411
10.1 获取InnoDB存储引擎源代码411
10.2 InnoDB源代码结构413
10.3 MySQL 5.1版本编译和调试InnoDB源代码415
10.3.1 Windows下的调试415
10.3.2 Linux下的调试418
10.4 cmake方式编译和调试InnoDB存储引擎423
10.5 小结424

推荐

车牌查询
桂ICP备20004708号-3