《MySQL8从入门到精通》是由清华大学出版社出版的一本关于MySQL8方面的书籍,作者是王英英,主要介绍了关于MySQL8、MySQL8入门方面的知识内容,目前在MySQL8类书籍综合评分为:8.6分。
书籍介绍
源MySQL数据库发展到今天,已经具有了非常广泛的用户基础,市场证明MySQL具有性价比高、使用灵活、应用广泛和具有良好支持的特点。
MySQL 8做了大量的改进,性能比MySQL5.7快2倍!本书把MySQL 8的新
特性分散到各章,结合实例进行讲解并做提示,方便读者快速掌握MySQL数据库管理技术以及MySQL 8的新特性。
本书主要内容包括MySQL的安装与配置、数据库的创建、数据表的创建、数据类型和运算符、MySQL函数、查询数据、数据表的操作(插入、更新与删除数据)、索引、存储过程和函数、视图、触发器、用户管理、数据备份与还原、MySQL日志、性能优化、MySQL Replication、MySQL Workbench、MySQL Utilities、MySQL Proxy、PHP操作MySQL数据库和PDO数据库抽象类库等。*后通过3个综合案例的数据库设计,进一步讲述MySQL在实际工作中的应用。 本书共有480个实例和16个综合案例,还有大量的经典习题。随书赠送了近20小时培训班形式的视频教学录像,详细讲解了书中每一个知识点和每一个数据库操作的方法和技巧,同时还提供了本书所有例子的源代码,读者可以直接查看和调用。 本书注重实战操作,帮助读者循序渐进地掌握MySQL中的各项技术,非常适合MySQL数据库初学者、MySQL数据库开发人员和MySQL数据库管理员阅读,同时也能作为高等院校和培训学校相关专业师生的教学用书。
目录
- 第1章 初识MySQL 1
- 1.1 数据库基础 1
- 1.1.1 什么是数据库 2
- 1.1.2 表 2
- 1.1.3 数据类型 2
- 1.1.4 主键 3
- 1.2 数据库技术构成 3
- 1.2.1 数据库系统 3
- 1.2.2 SQL语言 4
- 1.2.3 数据库访问接口 5
- 1.3 什么是MySQL 5
- 1.3.1 客户端/服务器软件 5
- 1.3.2 MySQL版本 6
- 1.3.3 MySQL的优势 7
- 1.4 MySQL工具 7
- 1.4.1 MySQL命令行实用程序 7
- 1.4.2 MySQL Workbench 8
- 1.5 MySQL 8.0的新特性简述 9
- 1.6 如何学习MySQL 11
- 第2章 MySQL的安装与配置 13
- 2.1 Windows平台下安装与配置MySQL 8.0 13
- 2.1.1 安装MySQL 8.0 14
- 2.1.2 配置MySQL 8.0 17
- 2.2 启动服务并登录MySQL数据库 22
- 2.2.1 启动MySQL服务 22
- 2.2.2 登录MySQL数据库 24
- 2.2.3 配置Path变量 25
- 2.3 MySQL常用图形管理工具 27
- 2.4 Linux平台下安装与配置MySQL 8.0 28
- 2.4.1 Linux操作系统下的MySQL版本介绍 28
- 2.4.2 安装和配置MySQL的RPM包 29
- 2.4.3 安装和配置MySQL的源码包 32
- 2.5 专家解惑 32
- 2.6 经典习题 33
- 第3章 数据库的基本操作 34
- 3.1 创建数据库 34
- 3.2 删除数据库 36
- 3.3 MySQL 8.0的新特性——系统表全部为InnoDB表 36
- 3.4 综合案例——数据库的创建和删除 37
- 3.5 专家解惑 39
- 3.6 经典习题 39
- 第4章 数据表的基本操作 40
- 4.1 创建数据表 40
- 4.1.1 创建表的语法形式 41
- 4.1.2 使用主键约束 42
- 4.1.3 使用外键约束 43
- 4.1.4 使用非空约束 44
- 4.1.5 使用唯一性约束 45
- 4.1.6 使用默认约束 46
- 4.1.7 设置表的属性值自动增加 46
- 4.2 查看数据表结构 47
- 4.2.1 查看表基本结构语句DESCRIBE 47
- 4.2.2 查看表详细结构语句SHOW CREATE TABLE 48
- 4.3 修改数据表 49
- 4.3.1 修改表名 49
- 4.3.2 修改字段的数据类型 50
- 4.3.3 修改字段名 51
- 4.3.4 添加字段 52
- 4.3.5 删除字段 54
- 4.3.6 修改字段的排列位置 55
- 4.3.7 更改表的存储引擎 56
- 4.3.8 删除表的外键约束 57
- 4.4 删除数据表 58
- 4.4.1 删除没有被关联的表 59
- 4.4.2 删除被其他表关联的主表 59
- 4.5 MySQL 8.0的新特性1——默认字符集改为utf8mb4 61
- 4.6 MySQL 8.0的新特性2——自增变量的持久化 62
- 4.7 综合案例——数据表的基本操作 64
- 4.8 专家解惑 72
- 4.9 经典习题 72
- 第5章 数据类型和运算符 74
- 5.1 MySQL数据类型介绍 74
- 5.1.1 整数类型 75
- 5.1.2 浮点数类型和定点数类型 76
- 5.1.3 日期与时间类型 78
- 5.1.4 文本字符串类型 89
- 5.1.5 二进制字符串类型 94
- 5.2 如何选择数据类型 96
- 5.3 常见运算符介绍 98
- 5.3.1 运算符概述 98
- 5.3.2 算术运算符 98
- 5.3.3 比较运算符 100
- 5.3.4 逻辑运算符 107
- 5.3.5 位运算符 110
- 5.3.6 运算符的优先级 112
- 5.4 综合案例——运算符的使用 113
- 5.5 专家解惑 115
- 5.6 经典习题 116
- 第6章 MySQL函数 117
- 6.1 MySQL函数简介 117
- 6.2 数学函数 118
- 6.2.1 绝对值函数ABS(x)和返回圆周率的函数PI() 118
- 6.2.2 平方根函数SQRT(x)和求余函数MOD(x,y) 118
- 6.2.3 获取整数的函数CEIL(x)、CEILING(x)和FLOOR(x) 119
- 6.2.4 获取随机数的函数RAND()和RAND(x) 120
- 6.2.5 函数ROUND(x)、ROUND(x,y)和TRUNCATE(x,y) 120
- 6.2.6 符号函数SIGN(x) 121
- 6.2.7 幂运算函数POW(x,y)、POWER(x,y)和EXP(x) 122
- 6.2.8 对数运算函数LOG(x)和LOG10(x) 122
- 6.2.9 角度与弧度相互转换的函数RADIANS(x)和DEGREES(x) 123
- 6.2.10 正弦函数SIN(x)和反正弦函数ASIN(x) 123
- 6.2.11 余弦函数COS(x)和反余弦函数ACOS(x) 124
- 6.2.12 正切函数、反正切函数和余切函数 124
- 6.3 字符串函数 125
- 6.3.1 计算字符串字符数的函数和字符串长度的函数 125
- 6.3.2 合并字符串函数CONCAT(s1,s2,…)、CONCAT_WS(x,s1,s2,…) 126
- 6.3.3 替换字符串的函数INSERT(s1,x,len,s2) 126
- 6.3.4 字母大小写转换函数 127
- 6.3.5 获取指定长度的字符串的函数LEFT(s,n)和RIGHT(s,n) 128
- 6.3.6 填充字符串的函数LPAD(s1,len,s2)和RPAD(s1,len,s2) 128
- 6.3.7 删除空格的函数LTRIM(s)、RTRIM(s)和TRIM(s) 129
- 6.3.8 删除指定字符串的函数TRIM(s1 FROM s) 130
- 6.3.9 重复生成字符串的函数REPEAT(s,n) 130
- 6.3.10 空格函数SPACE(n)和替换函数REPLACE(s,s1,s2) 130
- 6.3.11 比较字符串大小的函数STRCMP(s1,s2) 131
- 6.3.12 获取子串的函数SUBSTRING(s,n,len)和MID(s,n,len) 131
- 6.3.13 匹配子串开始位置的函数 132
- 6.3.14 字符串逆序的函数REVERSE(s) 133
- 6.3.15 返回指定位置的字符串的函数 133
- 6.3.16 返回指定字符串位置的函数FIELD(s,s1,s2,…,sn) 133
- 6.3.17 返回子串位置的函数FIND_IN_SET(s1,s2) 134
- 6.3.18 选取字符串的函数MAKE_SET(x,s1,s2,…,sn) 134
- 6.4 日期和时间函数 135
- 6.4.1 获取当前日期的函数和获取当前时间的函数 135
- 6.4.2 获取当前日期和时间的函数 135
- 6.4.3 UNIX时间戳函数 136
- 6.4.4 返回UTC日期的函数和返回UTC时间的函数 137
- 6.4.5 获取月份的函数MONTH(date)和MONTHNAME(date) 137
- 6.4.6 获取星期的函数DAYNAME(d)、DAYOFWEEK(d)和WEEKDAY(d) 138
- 6.4.7 获取星期数的函数WEEK(d)和WEEKOFYEAR(d) 138
- 6.4.8 获取天数的函数DAYOFYEAR(d)和DAYOFMONTH(d) 139
- 6.4.9 获取年份、季度、小时、分钟和秒钟的函数 140
- 6.4.10 获取日期的指定值的函数EXTRACT(type FROM date) 141
- 6.4.11 时间和秒钟转换的函数 141
- 6.4.12 计算日期和时间的函数 142
- 6.4.13 将日期和时间格式化的函数 145
- 6.5 条件判断函数 147
- 6.5.1 IF(expr,v1,v2)函数 147
- 6.5.2 IFNULL(v1,v2)函数 148
- 6.5.3 CASE函数 148
- 6.6 系统信息函数 149
- 6.6.1 获取MySQL版本号、连接数和数据库名的函数 149
- 6.6.2 获取用户名的函数 151
- 6.6.3 获取字符串的字符集和排序方式的函数 151
- 6.6.4 获取最后一个自动生成的ID值的函数 152
- 6.7 MySQL 8.0的新特性1——加密函数 154
- 6.7.1 加密函数MD5(str) 154
- 6.7.2 加密函数SHA(str) 154
- 6.7.3 加密函数SHA2(str, hash_length) 154
- 6.8 其他函数 155
- 6.8.1 格式化函数FORMAT(x,n) 155
- 6.8.2 不同进制的数字进行转换的函数 155
- 6.8.3 IP地址与数字相互转换的函数 156
- 6.8.4 加锁函数和解锁函数 156
- 6.8.5 重复执行指定操作的函数 157
- 6.8.6 改变字符集的函数 158
- 6.8.7 改变数据类型的函数 158
- 6.9 MySQL 8.0的新特性2——窗口函数 159
- 6.10 综合案例——MySQL函数的使用 160
- 6.11 专家解惑 163
- 6.12 经典习题 164
- 第7章 查询数据 165
- 7.1 基本查询语句 165
- 7.2 单表查询 168
- 7.2.1 查询所有字段 168
- 7.2.2 查询指定字段 169
- 7.2.3 查询指定记录 171
- 7.2.4 带IN关键字的查询 172
- 7.2.5 带BETWEEN AND的范围查询 174
- 7.2.6 带LIKE的字符匹配查询 175
- 7.2.7 查询空值 176
- 7.2.8 带AND的多条件查询 178
- 7.2.9 带OR的多条件查询 179
- 7.2.10 查询结果不重复 180
- 7.2.11 对查询结果排序 181
- 7.2.12 分组查询 184
- 7.2.13 使用LIMIT限制查询结果的数量 189
- 7.3 使用集合函数查询 190
- 7.3.1 COUNT()函数 191
- 7.3.2 SUM()函数 192
- 7.3.3 AVG()函数 193
- 7.3.4 MAX()函数 194
- 7.3.5 MIN()函数 195
- 7.4 连接查询 196
- 7.4.1 内连接查询 196
- 7.4.2 外连接查询 199
- 7.4.3 复合条件连接查询 201
- 7.5 子查询 202
- 7.5.1 带ANY、SOME关键字的子查询 202
- 7.5.2 带ALL关键字的子查询 203
- 7.5.3 带EXISTS关键字的子查询 203
- 7.5.4 带IN关键字的子查询 204
- 7.5.5 带比较运算符的子查询 206
- 7.6 合并查询结果 208
- 7.7 为表和字段取别名 210
- 7.7.1 为表取别名 210
- 7.7.2 为字段取别名 212
- 7.8 使用正则表达式查询 213
- 7.8.1 查询以特定字符或字符串开头的记录 214
- 7.8.2 查询以特定字符或字符串结尾的记录 215
- 7.8.3 用符号"."来替代字符串中的任意一个字符 215
- 7.8.4 使用"*"和" "来匹配多个字符 216
- 7.8.5 匹配指定字符串 216
- 7.8.6 匹配指定字符中的任意一个 217
- 7.8.7 匹配指定字符以外的字符 218
- 7.8.8 使用{n,}或者{n,m}来指定字符串连续出现的次数 219
- 7.9 MySQL 8.0的新特性1—— GROUP BY不再隐式排序 220
- 7.10 MySQL 8.0的新特性2——通用表表达式 222
- 7.11 综合案例——数据表查询操作 225
- 7.12 专家解惑 232
- 7.13 经典习题 233
- 第8章 插入、更新与删除数据 234
- 8.1 插入数据 234
- 8.1.1 为表的所有字段插入数据 235
- 8.1.2 为表的指定字段插入数据 236
- 8.1.3 同时插入多条记录 238
- 8.1.4 将查询结果插入到表中 239
- 8.2 更新数据 241
- 8.3 删除数据 243
- 8.4 为表增加计算列 245
- 8.5 MySQL 8.0的新特性——DDL的原子化 246
- 8.6 综合案例——记录的插入、更新和删除 247
- 8.7 专家解惑 251
- 8.8 经典习题 252
- 第9章 索 引 253
- 9.1 索引简介 253
- 9.1.1 索引的含义和特点 254
- 9.1.2 索引的分类 254
- 9.1.3 索引的设计原则 255
- 9.2 创建索引 255
- 9.2.1 创建表的时候创建索引 256
- 9.2.2 在已经存在的表上创建索引 261
- 9.3 删除索引 267
- 9.4 MySQL 8.0的新特性1——支持降序索引 269
- 9.5 MySQL 8.0的新特性2——统计直方图 272
- 9.5.1 直方图的优点 272
- 9.5.2 直方图的基本操作 273
- 9.6 综合案例——创建索引 274
- 9.7 专家解惑 277
- 9.8 经典习题 277
- 第10章 存储过程和函数 278
- 10.1 创建存储过程和函数 279
- 10.1.1 创建存储过程 279
- 10.1.2 创建存储函数 281
- 10.1.3 变量的使用 282
- 10.1.4 定义条件和处理程序 283
- 10.1.5 光标的使用 286
- 10.1.6 流程控制的使用 287
- 10.2 调用存储过程和函数 291
- 10.2.1 调用存储过程 291
- 10.2.2 调用存储函数 292
- 10.3 查看存储过程和函数 293
- 10.3.1 使用SHOW STATUS语句查看存储过程和函数的状态 293
- 10.3.2 使用SHOW CREATE语句查看存储过程和函数的定义 294
- 10.3.3 从information_schema.Routines表中查看存储过程和 函数的信息 295
- 10.4 修改存储过程和函数 296
- 10.5 删除存储过程和函数 298
- 10.6 MySQL 8.0的新特性——全局变量的持久化 298
- 10.7 综合案例——创建存储过程和函数 299
- 10.8 专家解惑 302
- 10.9 经典习题 303
- 第11章 视 图 304
- 11.1 视图概述 304
- 11.1.1 视图的含义 305
- 11.1.2 视图的作用 305
- 11.2 创建视图 306
- 11.2.1 创建视图的语法形式 306
- 11.2.2 在单表上创建视图 307
- 11.2.3 在多表上创建视图 307
- 11.3 查看视图 308
- 11.3.1 使用DESCRIBE语句查看视图基本信息 308
- 11.3.2 使用SHOW TABLE STATUS语句查看视图基本信息 309
- 11.3.3 使用SHOW CREATE VIEW语句查看视图详细信息 310
- 11.3.4 在views表中查看视图详细信息 311
- 11.4 修改视图 312
- 11.4.1 使用CREATE OR REPLACE VIEW语句修改视图 312
- 11.4.2 使用ALTER语句修改视图 313
- 11.5 更新视图 314
- 11.6 删除视图 316
- 11.7 综合案例——视图应用 317
- 11.8 专家解惑 325
- 11.9 经典习题 326
- 第12章 MySQL触发器 327
- 12.1 创建触发器 327
- 12.1.1 创建只有一个执行语句的触发器 328
- 12.1.2 创建有多个执行语句的触发器 329
- 12.2 查看触发器 331
- 12.2.1 利用SHOW TRIGGERS语句查看触发器信息 331
- 12.2.2 在triggers表中查看触发器信息 333
- 12.3 触发器的使用 334
- 12.4 删除触发器 335
- 12.5 综合案例——触发器的使用 336
- 12.6 专家解惑 338
- 12.7 经典习题 338
- 第13章 MySQL权限与安全管理 339
- 13.1 权 限 表 339
- 13.1.1 user表 340
- 13.1.2 db表 342
- 13.1.3 tables_priv表和columns_priv表 343
- 13.1.4 procs_priv表 344
- 13.2 账户管理 344
- 13.2.1 登录和退出MySQL服务器 345
- 13.2.2 新建普通用户 346
- 13.2.3 删除普通用户 348
- 13.2.4 root用户修改自己的密码 349
- 13.2.5 root用户修改普通用户密码 350
- 13.3 权限管理 351
- 13.3.1 MySQL的各种权限 351
- 13.3.2 授权 353
- 13.3.3 收回权限 355
- 13.3.4 查看权限 356
- 13.4 访问控制 357
- 13.4.1 连接核实阶段 357
- 13.4.2 请求核实阶段 357
- 13.5 提升安全性 358
- 13.5.1 AES 256加密 358
- 13.5.2 密码到期更换策略 360
- 13.5.3 安全模式安装 361
- 13.6 MySQL 8.0的新特性——管理角色 362
- 13.7 综合案例——综合管理用户权限 363
- 13.8 专家解惑 366
- 13.9 经典习题 366
- 第14章 数据备份与恢复 368
- 14.1 数据备份 368
- 14.1.1 使用MySQLdump命令备份 369
- 14.1.2 直接复制整个数据库目录 374
- 14.1.3 使用MySQLhotcopy工具快速备份 375
- 14.2 数据恢复 375
- 14.2.1 使用MySQL命令恢复 375
- 14.2.2 直接复制到数据库目录 376
- 14.2.3 MySQLhotcopy快速恢复 377
- 14.3 数据库迁移 377
- 14.3.1 相同版本的MySQL数据库之间的迁移 377
- 14.3.2 不同版本的MySQL数据库之间的迁移 378
- 14.3.3 不同数据库之间的迁移 378
- 14.4 表的导出和导入 378
- 14.4.1 使用SELECT…INTO OUTFILE导出文本文件 379
- 14.4.2 使用MySQLdump命令导出文本文件 383
- 14.4.3 使用MySQL命令导出文本文件 385
- 14.4.4 使用LOAD DATA INFILE方式导入文本文件 389
- 14.4.5 使用MySQLimport命令导入文本文件 391
- 14.5 综合案例——数据的备份与恢复 392
- 14.6 专家解惑 396
- 14.7 经典习题 397
- 第15章 MySQL日志 398
- 15.1 日志简介 398
- 15.2 二进制日志 399
- 15.2.1 启动和设置二进制日志 399
- 15.2.2 查看二进制日志 401
- 15.2.3 删除二进制日志 402
- 15.2.4 使用二进制日志恢复数据库 404
- 15.2.5 暂时停止二进制日志功能 404
- 15.3 错误日志 405
- 15.3.1 启动和设置错误日志 405
- 15.3.2 查看错误日志 405
- 15.3.3 删除错误日志 406
- 15.4 通用查询日志 407
- 15.4.1 启动通用查询日志 407
- 15.4.2 查看通用查询日志 407
- 15.4.3 删除通用查询日志 408
- 15.5 慢查询日志 408
- 15.5.1 启动和设置慢查询日志 409
- 15.5.2 查看慢查询日志 409
- 15.5.3 删除慢查询日志 410
- 15.6 MySQL 8.0的新特性——日志分类更详细 410
- 15.7 综合案例——MySQL日志的综合管理 410
- 15.8 专家解惑 416
- 15.9 经典习题 416
- 第16章 性能优化 418
- 16.1 优化简介 418
- 16.2 优化查询 419
- 16.2.1 分析查询语句 419
- 16.2.2 索引对查询速度的影响 423
- 16.2.3 使用索引查询 424
- 16.2.4 优化子查询 426
- 16.3 优化数据库结构 427
- 16.3.1 将字段很多的表分解成多个表 427
- 16.3.2 增加中间表 428
- 16.3.3 增加冗余字段 430
- 16.3.4 优化插入记录的速度 430
- 16.3.5 分析表、检查表和优化表 432
- 16.4 优化MySQL服务器 434
- 16.4.1 优化服务器硬件 434
- 16.4.2 优化MySQL的参数 434
- 16.5 临时表性能优化 435
- 16.6 服务器语句超时处理 437
- 16.7 创建全局通用表空间 438
- 16.8 MySQL 8.0的新特性1——支持不可见索引 438
- 16.9 MySQL 8.0的新特性2——增加资源组 440
- 16.10 综合案例——全面优化MySQL服务器 442
- 16.11 专家解惑 444
- 16.12 经典习题 445
- 第17章 MySQL Replication 446
- 17.1 MySQL Replication概述 446
- 17.2 Windows环境下的MySQL主从复制 447
- 17.2.1 复制前的准备工作 447
- 17.2.2 Windows环境下实现主从复制 448
- 17.2.3 Windows环境下主从复制测试 455
- 17.3 Linux环境下的MySQL复制 456
- 17.3.1 下载并安装MySQL 8.0 456
- 17.3.2 单机主从复制前的准备工作 458
- 17.3.3 MySQLd_multi实现单机主从复制 461
- 17.3.4 不同服务器之间实现主从复制 468
- 17.3.5 MySQL 主要复制启动选项 470
- 17.3.6 指定复制的数据库或者表 471
- 17.4 查看Slave的复制进度 478
- 17.5 日常管理和维护 479
- 17.5.1 了解服务器的状态 480
- 17.5.2 服务器复制出错的原因 481
- 17.6 切换主从服务器 483
- 17.7 多源复制的改进 487
- 17.8 专家解惑 489
- 17.9 经典习题 490
- 第18章 MySQL Workbench 的使用 492
- 18.1 MySQL Workbench简介 492
- 18.1.1 MySQL Workbench 的概述 493
- 18.1.2 MySQL Workbench 的优势 493
- 18.1.3 MySQL Workbench 的安装 493
- 18.2 SQL Development的基本操作 495
- 18.2.1 创建数据库连接 495
- 18.2.2 创建新的数据库 496
- 18.2.3 创建和删除新的数据表 498
- 18.2.4 添加、修改表记录 501
- 18.2.5 查询表记录 502
- 18.2.6 修改表结构 503
- 18.3 Data Modeling的基本操作 504
- 18.3.1 建立ER模型 504
- 18.3.2 导入ER模型 509
- 18.4 Server Administration的基本操作 511
- 18.4.1 管理MySQL用户 511
- 18.4.2 备份MySQL数据库 514
- 18.4.3 恢复MySQL数据库 517
- 18.5 专家解惑 518
- 18.6 经典习题 518
- 第19章 MySQL管理利器——MySQL Utilities 519
- 19.1 MySQL Utilities概述 519
- 19.2 安装与配置 520
- 19.2.1 下载与安装MySQL Utilities 520
- 19.2.2 MySQL Utilities连接数据库 522
- 19.3 管理与维护 522
- 19.3.1 使用mysqldbcompare比较数据 523
- 19.3.2 使用mysqldbcopy复制数据 523
- 19.3.3 使用mysqldbexport导出数据 524
- 19.3.4 使用mysqldbimport导入数据 524
- 19.3.5 使用mysqldiff比较对象的定义 525
- 19.4 专家解惑 525
- 19.5 经典习题 526
- 第20章 读写分离的利器——MySQL Proxy 527
- 20.1 概述 527
- 20.2 安装与配置 528
- 20.2.1 下载与安装MySQL Proxy 529
- 20.2.2 配置MySQL Proxy参数 529
- 20.2.3 配置Path变量 532
- 20.3 使用MySQL Proxy实现读写分离 533
- 20.4 专家解惑 534
- 20.5 经典习题 535
- 第21章 精通MySQL存储引擎 536
- 21.1 MySQL架构 536
- 21.1.1 MySQL物理文件的组成 537
- 21.1.2 MySQL各逻辑块简介 539
- 21.1.3 MySQL各逻辑块协调工作 541
- 21.2 数据库存储引擎 543
- 21.2.1 MySQL存储引擎简介 543
- 21.2.2 InnoDB存储引擎 545
- 21.2.3 MyISAM存储引擎 545
- 21.2.4 MEMORY存储引擎 546
- 21.2.5 MERGE存储引擎 546
- 21.2.6 BerkeleyDB存储引擎 548
- 21.3 认识MySQL的锁定机制 549
- 21.4 MyISAM的锁定机制 554
- 21.4.1 MyISAM表级锁的锁模式 554
- 21.4.2 获取MyISAM表级锁的争用情况 556
- 21.4.3 MyISAM表级锁加锁方法 557
- 21.4.4 MyISAM Concurrent Insert的特性 559
- 21.4.5 MyISAM表级锁优化建议 561
- 21.5 InnoDB的锁定机制 562
- 21.5.1 InnoDB行级锁模式 562
- 21.5.2 获取InnoDB行级锁的争用情况 567
- 21.5.3 InnoDB行级锁的实现方法 569
- 21.5.4 间隙锁(Net-Key锁) 575
- 21.5.5 InnoDB 在不同隔离级别下加锁的差异 576
- 21.5.6 InnoDB 存储引擎中的死锁 576
- 21.5.7 InnoDB行级锁优化建议 579
- 21.6 InnoDB存储引擎的在线操作 580
- 21.6.1 在线添加主键 580
- 21.6.2 在线增大VARCHAR列长 581
- 21.6.3 在线重命名索引 582
- 21.7 MySQL 8.0的新特性1——支持JSON类型 582
- 21.8 MySQL 8.0的新特性2——全文索引的加强 584
- 21.9 MySQL 8.0的新特性3—— 动态修改InnoDB缓冲池的大小 586
- 21.10 MySQL 8.0的新特性4——表空间数据加密 587
- 21.11 MySQL 8.0的新特性5——跳过锁等待 588
- 21.12 专家解惑 589
- 21.13 经典习题 590
- 第22章 PHP操作MySQL数据库 591
- 22.1 PHP访问MySQL数据库的一般步骤 591
- 22.2 连接数据库前的准备工作 592
- 22.3 访问数据库 593
- 22.3.1 使用mysqli_connect()函数连接MySQL服务器 593
- 22.3.2 使用mysqli_select_db()函数更改默认的数据库 594
- 22.3.3 使用mysqli_close()函数关闭MySQL连接 595
- 22.3.4 使用mysqli_query()函数执行SQL语句 595
- 22.3.5 获取查询结果集中的记录数 596
- 22.3.6 获取结果集中的一条记录作为枚举数组 597
- 22.3.7 获取结果集中的记录作为关联数组 598
- 22.3.8 获取结果集中的记录作为对象 599
- 22.3.9 使用mysqli_fetch_array()函数获取结果集记录 599
- 22.3.10 使用mysqli_free_result()函数释放资源 600
- 22.4 综合实例1——PHP操作MySQL数据库 600
- 22.5 综合实例2——使用insert语句动态添加用户信息 602
- 22.6 综合实例3——使用select语句查询数据信息 604
- 22.7 专家解惑 605
- 第23章 PDO数据库抽象类库 607
- 23.1 PDO概述 607
- 23.2 PDO的安装 608
- 23.3 使用PDO操作MySQL 608
- 23.3.1 连接MySQL数据库的方法 609
- 23.3.2 使用PDO时的try catch错误处理结构 610
- 23.3.3 使用PDO执行SQL的选择语句 612
- 23.3.4 使用PDO获取返回数据的类方法 613
- 23.3.5 使用PDO执行SQL的添加、修改语句 615
- 23.3.6 使用PDO执行SQL的删除语句 616
- 23.4 综合实例——PDO的prepare表述 616
- 23.5 专家解惑 618
- 第24章 综合项目1——开发网上商城 619
- 24.1 系统功能描述 619
- 24.2 系统功能分析 620
- 24.2.1 系统功能分析 620
- 24.2.2 数据流程和数据库 621
- 24.3 代码的具体实现 623
- 24.4 程序运行 633
- 第25章 综合项目2——论坛管理系统数据库设计 635
- 25.1 系统概述 635
- 25.2 系统功能 636
- 25.3 数据库设计和实现 637
- 25.3.1 设计方案图表 637
- 25.3.2 设计表 639
- 25.3.3 设计索引 642
- 25.3.4 设计视图 643
- 25.3.5 设计触发器 644
- 第26章 综合项目3——新闻发布系统数据库设计 646
- 26.1 系统概述 646
- 26.2 系统功能 647
- 26.3 数据库设计和实现 648
- 26.3.1 设计表 648
- 26.3.2 设计索引 652
- 26.3.3 设计视图 653
- 26.3.4 设计触发器 654