Skip to content

MySQL 从入门到精通:完整教程目录 ​

教程定位:本教程面向零基础读者,从数据库基本概念讲起,逐步深入到事务、索引优化、主从复制等高级主题。每章配有可运行的 SQL 代码、常见错误分析、练习题,帮助你在实践中掌握 MySQL。


阅读指南 ​

本教程共 38 章 + 3 个附录,按 11 个阶段组织。每个阶段聚焦一个核心主题,循序渐进:

阶段章节范围核心目标建议学习时间
Phase 1第01-03章建立数据库基本认知,安装 MySQL,跑通第一个查询1-2 天
Phase 2第04-08章掌握 DDL(数据定义语言),能独立建库建表3-5 天
Phase 3第09-12章掌握 DML(数据操作语言),增删改数据2-3 天
Phase 4第13-18章精通 DQL(数据查询语言),写出复杂查询5-7 天
Phase 5第19-21章熟练使用内置函数处理数据2-3 天
Phase 6第22-25章掌握视图、存储过程、触发器、事件等高级对象3-5 天
Phase 7第26-28章理解事务、锁机制、并发控制3-4 天
Phase 8第29-31章掌握用户权限管理、备份恢复、日志管理3-4 天
Phase 9第32-34章精通索引原理、SQL 优化、执行计划分析4-5 天
Phase 10第35-36章学习主从复制、分区表等高级主题3-4 天
Phase 11第37-38章综合实战:设计完整的业务数据库 + 常见面试题3-5 天

学习建议 ​

  1. 按顺序学习:MySQL 知识有很强的依赖关系,理解前几章的数据类型和 DDL,后面的 DML 和 DQL 才能学得顺利
  2. 必须手敲代码:每个 SQL 示例都要自己在电脑上敲一遍,看一遍和敲一遍的效果天差地别
  3. 练习必须做:每章末尾的练习题是巩固知识的关键,参考答案见附录 C
  4. 理解原理比记住语法更重要:比如 InnoDB 的索引为什么用 B+ 树而不是红黑树?理解背后的原理能让你举一反三
  5. 遇到错误先自己排查:不要一看到报错就急着问人,试着读懂错误信息,用搜索引擎搜索,排查的过程本身就是最好的学习
  6. 搭建一个自己的数据库项目:学完 Phase 6 后,尝试自己设计一个小型业务系统(比如学生管理系统、图书管理系统),把学到的知识串联起来

Phase 1:数据库入门与环境搭建 ​

第 01 章:数据库基础概念 ​

  • 什么是数据、数据库、DBMS
  • 关系型 vs 非关系型数据库(含对比表)
  • SQL 的分类(DDL/DML/DQL/DCL/TCL)
  • MySQL 发展历史(创始人、版本演进)
  • MySQL Community vs Enterprise 版本
  • MySQL 架构概览(连接层、SQL 层、存储引擎层)
  • 常用存储引擎(InnoDB vs MyISAM 对比表)
  • MySQL 在真实世界中的应用场景

第 02 章:MySQL 安装与配置 ​

  • 下载页面详解
  • Windows:MSI 安装器逐步指南
  • Windows:ZIP 压缩包方式
  • Linux:apt 安装(Ubuntu/Debian)
  • Linux:yum 安装(CentOS/RHEL)
  • Mac:Homebrew 安装
  • Mac:DMG 安装器
  • 安装后的目录结构
  • my.ini/my.cnf 配置文件详细解析
  • 关键配置参数说明
  • 各操作系统的启动/停止服务方法
  • 验证安装
  • 首次修改 root 密码
  • mysql_secure_installation 安全初始化

第 03 章:连接 MySQL 与第一个查询 ​

  • mysql 命令行客户端:语法与常用选项
  • 连接本地 MySQL
  • 连接远程 MySQL
  • mysql 客户端提示符含义
  • 第一个查询:SELECT VERSION()、SELECT NOW()、SELECT USER()
  • SHOW DATABASES 列出所有数据库
  • USE 切换数据库
  • SHOW TABLES 列出当前数据库的表
  • DESCRIBE/DESC 查看表结构
  • SHOW CREATE DATABASE/TABLE 查看创建语句
  • MySQL 系统数据库简介(mysql、information_schema、performance_schema、sys)
  • HELP 命令的使用
  • mysql 客户端常用快捷键(\h、\G、\c、\q、\s、.)
  • MySQL Workbench:下载、安装、创建连接、运行查询
  • DBeaver:为什么流行、下载、连接、基本用法
  • 字符集问题处理(set names utf8mb4)

Phase 2:数据库与表的定义(DDL) ​

第 04 章:数据库操作 ​

  • CREATE DATABASE 完整语法
  • 字符集(charset)详解:utf8 vs utf8mb4 的著名陷阱
  • 排序规则(collation)详解:_general_ci vs _unicode_ci vs _bin
  • SHOW CHARACTER SET 与 SHOW COLLATION
  • 实际示例:创建不同字符集/排序规则的数据库
  • SHOW CREATE DATABASE 查看数据库创建语句
  • ALTER DATABASE 修改数据库属性
  • DROP DATABASE(小心!没有回收站!)
  • USE 与 SELECT DATABASE()
  • SHOW DATABASES LIKE 模式匹配过滤
  • 数据库命名规范与最佳实践

第 05 章:数据类型(上)—— 数值与字符串 ​

  • 整数类型完整表:TINYINT/SMALLINT/MEDIUMINT/INT/BIGINT
  • UNSIGNED 修饰符与 ZEROFILL
  • INT(11) 中显示宽度的真正含义
  • AUTO_INCREMENT 与整数类型
  • 定点数:DECIMAL/NUMERIC 精确保存原理
  • 浮点数:FLOAT/DOUBLE 的 IEEE 754 精度陷阱
  • 为什么 0.1+0.2 != 0.3 在 FLOAT/DOUBLE 中
  • BIT 类型
  • CHAR vs VARCHAR 完整对比(存储、长度、空格处理、性能)
  • VARCHAR 的存储开销(1字节 vs 2字节长度前缀)
  • 为什么 VARCHAR(255) 很常见但不神奇
  • TEXT 系列(TINYTEXT/TEXT/MEDIUMTEXT/LONGTEXT)
  • TEXT 与 VARCHAR 的差异
  • BINARY/VARBINARY
  • BLOB 系列
  • ENUM 类型详解
  • SET 类型详解
  • ENUM 和 SET 的陷阱与替代方案

第 06 章:数据类型(下)—— 日期与特殊类型 ​

  • DATE 类型
  • TIME 类型
  • DATETIME 类型
  • TIMESTAMP 类型
  • DATETIME vs TIMESTAMP 完整对比表
  • TIMESTAMP 自动初始化与自动更新
  • 时区行为详解
  • YEAR 类型(MySQL 8.0+ 已弃用)
  • JSON 类型:为什么需要、基本函数预览
  • 生成列(虚拟列/存储列)用于索引 JSON 字段
  • BOOLEAN/BOOL(本质是 TINYINT(1))
  • 空间数据类型概览(GEOMETRY/POINT/LINESTRING/POLYGON)
  • 如何选择正确的数据类型:决策流程图

第 07 章:创建与管理表 ​

  • CREATE TABLE 完整语法详解
  • 列级约束 vs 表级约束
  • 定义 PRIMARY KEY(单列主键、复合主键)
  • AUTO_INCREMENT 的使用规则
  • ENGINE 选择(InnoDB vs MyISAM vs MEMORY)
  • 表选项(CHARSET/COLLATE/COMMENT/AUTO_INCREMENT 起始值)
  • TEMPORARY TABLE(临时表)
  • 从已有表创建新表(LIKE vs AS SELECT)
  • ALTER TABLE 完整操作大全
  • DROP TABLE
  • TRUNCATE TABLE vs DELETE
  • RENAME TABLE(原子性交换表名)
  • SHOW CREATE TABLE 查看建表语句
  • SHOW TABLE STATUS 查看详细表信息
  • DESC/DESCRIBE/SHOW COLUMNS 查看列信息
  • SHOW TABLES LIKE 模式匹配

第 08 章:约束详解 ​

  • 什么是约束,为什么需要约束
  • PRIMARY KEY 深入(聚簇索引概念简介)
  • FOREIGN KEY 全面讲解(级联操作 CASCADE/SET NULL/RESTRICT/NO ACTION/SET DEFAULT)
  • 外键约束的要求与性能影响
  • 何时不使用外键
  • UNIQUE 约束(允许多个 NULL 的行为)
  • UNIQUE vs PRIMARY KEY 对比
  • NOT NULL 约束
  • DEFAULT 约束
  • CHECK 约束(MySQL 8.0+ 才真正支持!5.7 静默忽略的陷阱)
  • 查看约束的方法(SHOW CREATE TABLE、information_schema)
  • 启用/禁用外键检查(SET FOREIGN_KEY_CHECKS = 0/1)
  • 约束命名规范

Phase 3:数据操作(DML) ​

第 09 章:插入数据 ​

  • INSERT INTO ... VALUES 基础语法
  • 插入部分列 vs 全部列
  • 一次插入多行(批量 INSERT)
  • INSERT INTO ... SET 语法
  • INSERT ... SELECT 从其他表导入数据
  • INSERT IGNORE 忽略错误
  • INSERT ... ON DUPLICATE KEY UPDATE(存在则更新,不存在则插入)
  • REPLACE INTO(先删后插,小心!)
  • AUTO_INCREMENT 值的手动指定与 LAST_INSERT_ID()
  • NULL 与 DEFAULT 在 INSERT 中的行为
  • 从文件导入数据(LOAD DATA INFILE)
  • 常见 INSERT 错误

第 10 章:更新与删除数据 ​

  • UPDATE 基础语法
  • 使用 WHERE 条件过滤要更新的行(没有 WHERE = 全表更新!)
  • 更新多个列
  • UPDATE 中使用表达式与函数
  • 多表 UPDATE(JOIN UPDATE)
  • DELETE FROM 基础语法
  • 没有 WHERE 的 DELETE = 清空整张表
  • 多表 DELETE
  • DELETE vs TRUNCATE vs DROP 完整对比表
  • 安全模式(sql_safe_updates)防止误操作
  • 软删除 vs 硬删除
  • WHERE 条件的重要性与如何安全地编写

第 11 章:数据导入导出 ​

  • SELECT ... INTO OUTFILE 导出到文件
  • LOAD DATA INFILE 从文件导入
  • 文件权限问题(secure_file_priv)
  • mysqldump 工具详解(导出数据库、表、结构、数据)
  • mysqldump 常用选项(--no-data/--no-create-info/--where/--routines/--triggers)
  • mysql 命令导入 SQL 文件
  • mysqlimport 工具
  • CSV 格式导入导出
  • 大表导入导出的性能优化
  • mysqlpump(MySQL 5.7+ 并行导出工具)
  • MySQL Workbench 的数据导出/导入向导
  • 字符集在导入导出中的注意事项

第 12 章:数据校验与防呆设计 ​

  • 为什么需要数据校验
  • 数据库层面的校验 vs 应用层面的校验
  • 使用约束进行校验(NOT NULL/UNIQUE/CHECK/FOREIGN KEY)
  • 触发器的校验应用(触发器将在第24章详解)
  • 数据一致性检查方法
  • 重复数据查找与清理
  • 数据完整性验证查询示例
  • 防呆设计(Poka-yoke)在数据库中的应用

Phase 4:查询进阶(DQL) ​

第 13 章:SELECT 基础查询 ​

  • SELECT 语句完整语法结构
  • 选择特定列 vs 所有列(SELECT *)
  • 列的别名(AS)
  • DISTINCT 去重
  • LIMIT 限制返回行数
  • LIMIT offset, count 分页查询
  • ORDER BY 排序(ASC/DESC、多列排序)
  • ORDER BY 与 NULL 值的排序行为
  • WHERE 条件过滤
  • 无 WHERE 的 SELECT = 返回全表数据
  • 表达式与计算列
  • SELECT 语句的执行顺序概览

第 14 章:WHERE 条件过滤 ​

  • 比较运算符(=、<>/!=、<、<=、>、>=)
  • BETWEEN ... AND ... 范围查询
  • IN 列表匹配
  • LIKE 模式匹配(% 和 _ 通配符、ESCAPE 转义)
  • NULL 的判断(IS NULL / IS NOT NULL,不能用 = NULL!)
  • AND/OR/NOT 逻辑运算符
  • 运算符优先级与括号的使用
  • REGEXP/RLIKE 正则表达式匹配
  • EXISTS 子查询条件
  • 条件组合的实际案例

第 15 章:聚合函数与分组查询 ​

  • COUNT(*) vs COUNT(column) vs COUNT(DISTINCT column) 的差异
  • SUM、AVG、MAX、MIN
  • GROUP_CONCAT:将分组内的值拼接成字符串
  • GROUP BY 分组
  • 多列分组
  • HAVING 过滤分组(与 WHERE 的区别和联系)
  • WHERE vs HAVING 的执行时机差异
  • GROUP BY 与 ONLY_FULL_GROUP_BY 模式
  • 聚合函数与 NULL 的行为
  • 使用 ROLLUP 生成小计行

第 16 章:子查询 ​

  • 什么是子查询
  • 标量子查询(返回单个值)
  • 行子查询(返回一行)
  • 列子查询(返回一列)
  • 表子查询(返回多行多列,作为派生表)
  • 单行子查询 vs 多行子查询
  • ANY/SOME/ALL 与子查询结合
  • EXISTS 与 NOT EXISTS 子查询
  • 相关子查询 vs 非相关子查询
  • 子查询在 SELECT/FROM/WHERE/HAVING 中的使用
  • 子查询 vs JOIN 的选择
  • 子查询的性能注意事项

第 17 章:连接查询(JOIN) ​

  • 什么是连接,为什么需要连接
  • 笛卡尔积(CROSS JOIN)
  • INNER JOIN 内连接
  • LEFT JOIN 左外连接
  • RIGHT JOIN 右外连接
  • FULL OUTER JOIN 在 MySQL 中的模拟(UNION)
  • 多表连接
  • 自连接(SELF JOIN)
  • JOIN 的 ON 条件 vs WHERE 条件
  • 隐式连接(逗号语法)vs 显式 JOIN 语法
  • USING vs ON
  • NATURAL JOIN
  • STRAIGHT_JOIN
  • JOIN 的常见错误

第 18 章:集合操作与高级查询 ​

  • UNION 合并结果集(去重)
  • UNION ALL 合并结果集(保留重复)
  • UNION 的列数和类型要求
  • INTERSECT 和 EXCEPT 在 MySQL 中的模拟
  • 公用表表达式 CTE(WITH 子句)
  • 递归 CTE
  • 窗口函数概览(将在第25章详解)
  • 复杂查询的构建思路
  • 查询优化建议

Phase 5:内置函数全覆盖 ​

第 19 章:字符串函数与数值函数 ​

  • 字符串长度:CHAR_LENGTH vs LENGTH
  • 大小写转换:UPPER/LOWER
  • 去除空格:TRIM/LTRIM/RTRIM
  • 子字符串:SUBSTRING/SUBSTR/LEFT/RIGHT
  • 查找位置:INSTR/LOCATE/POSITION
  • 替换:REPLACE
  • 拼接:CONCAT/CONCAT_WS
  • 填充:LPAD/RPAD
  • 反转:REVERSE
  • 格式化:FORMAT
  • 数学运算:ABS/CEIL/FLOOR/ROUND/TRUNCATE
  • POWER/SQRT/MOD
  • RAND 随机数
  • SIGN 符号
  • GREATEST/LEAST
  • 三角函数(SIN/COS/TAN 等)

第 20 章:日期时间函数与流程控制函数 ​

  • 获取当前时间:NOW/CURDATE/CURTIME/SYSDATE
  • 日期加减:DATE_ADD/DATE_SUB/ADDDATE/SUBDATE
  • 日期差:DATEDIFF/TIMEDIFF/TIMESTAMPDIFF
  • 提取日期部分:YEAR/MONTH/DAY/HOUR/MINUTE/SECOND
  • DATE_FORMAT 日期格式化(%Y%m%d 等格式符)
  • STR_TO_DATE 字符串转日期
  • DAYOFWEEK/DAYOFYEAR/WEEKDAY 等
  • UNIX_TIMESTAMP/FROM_UNIXTIME
  • IF 函数
  • IFNULL/COALESCE/NULLIF
  • CASE WHEN 表达式(两种写法)

第 21 章:类型转换函数与加密函数 ​

  • CAST 函数
  • CONVERT 函数
  • 隐式类型转换的规则
  • 类型转换的陷阱
  • MD5 哈希
  • SHA1/SHA2 哈希
  • AES 加密/解密
  • UUID 生成
  • FORMAT 数字格式化
  • INET_ATON/INET_NTOA IP 地址转换

Phase 6:高级数据库对象 ​

第 22 章:视图 ​

  • 什么是视图:虚拟表的概念
  • CREATE VIEW 创建视图
  • 视图的查询(可更新视图 vs 只读视图)
  • WITH CHECK OPTION 约束
  • ALTER VIEW 修改视图
  • DROP VIEW 删除视图
  • SHOW CREATE VIEW 查看视图定义
  • 视图的优缺点
  • 物化视图(MySQL 的替代方案)
  • 视图的安全性应用

第 23 章:索引详解 ​

  • 什么是索引,为什么能加速查询
  • B+ 树索引的数据结构原理
  • 聚簇索引 vs 二级索引
  • 回表查询
  • 覆盖索引
  • CREATE INDEX 语法
  • 单列索引
  • 复合索引(多列索引)
  • 最左前缀原则
  • 唯一索引(UNIQUE INDEX)
  • 全文索引(FULLTEXT INDEX)
  • 空间索引(SPATIAL INDEX)
  • 前缀索引
  • 索引的维护(ANALYZE TABLE/OPTIMIZE TABLE)
  • 索引的代价(写入性能、磁盘空间)
  • 索引设计原则
  • 隐藏索引(MySQL 8.0+ INVISIBLE INDEX)
  • 降序索引(MySQL 8.0+)

第 24 章:存储过程与函数 ​

  • 什么是存储过程
  • 存储过程的优缺点
  • DELIMITER 修改语句分隔符
  • CREATE PROCEDURE 创建存储过程
  • IN/OUT/INOUT 参数模式
  • 存储过程中的变量声明
  • 存储过程中的流程控制(IF/CASE/LOOP/WHILE/REPEAT/LEAVE/ITERATE)
  • 游标(CURSOR)的使用
  • 条件处理程序(DECLARE ... HANDLER)
  • DROP PROCEDURE 删除存储过程
  • SHOW CREATE PROCEDURE 查看存储过程定义
  • 用户定义函数(UDF):CREATE FUNCTION
  • 存储函数 vs 存储过程的区别
  • 存储过程调试技巧

第 25 章:触发器与事件调度器 ​

  • 什么是触发器
  • 触发器的应用场景(审计日志、数据校验、自动计算)
  • CREATE TRIGGER 创建触发器
  • BEFORE/AFTER 与 INSERT/UPDATE/DELETE 的 6 种组合
  • NEW 和 OLD 伪记录
  • 多个触发器的执行顺序(FOLLOWS/PRECEDES,MySQL 5.7+)
  • 触发器的限制
  • DROP TRIGGER 删除触发器
  • SHOW TRIGGERS 查看触发器
  • 什么是事件调度器
  • 启用事件调度器(event_scheduler = ON)
  • CREATE EVENT 创建定时任务
  • ON SCHEDULE AT(一次性)/EVERY(重复性)
  • ALTER EVENT/DROP EVENT 管理事件
  • 典型应用:定期清理过期数据、定时统计汇总

Phase 7:事务、锁与并发控制 ​

第 26 章:事务基础 ​

  • 什么是事务
  • ACID 四大特性详解(原子性、一致性、隔离性、持久性)
  • 事务的开启与提交:START TRANSACTION/BEGIN、COMMIT
  • 事务的回滚:ROLLBACK
  • 保存点:SAVEPOINT、ROLLBACK TO SAVEPOINT、RELEASE SAVEPOINT
  • 自动提交模式(autocommit)
  • 隐式提交的语句(DDL 语句等会自动提交事务)
  • 事务的隔离级别概述(将在下一章详解)

第 27 章:事务隔离级别与锁机制 ​

  • 并发问题:脏读、不可重复读、幻读
  • 四种隔离级别:READ UNCOMMITTED/READ COMMITTED/REPEATABLE READ/SERIALIZABLE
  • 每种隔离级别解决的并发问题
  • MySQL(InnoDB)默认隔离级别:REPEATABLE READ
  • 查看和设置隔离级别(SET TRANSACTION ISOLATION LEVEL)
  • 什么是锁
  • 共享锁(S 锁/读锁)vs 排他锁(X 锁/写锁)
  • 表级锁:READ LOCK/WRITE LOCK
  • 行级锁:RECORD LOCK/GAP LOCK/NEXT-KEY LOCK
  • InnoDB 的 Next-Key Lock 如何解决幻读
  • 意向锁(Intention Lock)
  • AUTO-INC 锁(自增锁)
  • 死锁:成因、检测与处理
  • SHOW ENGINE INNODB STATUS 查看锁信息
  • performance_schema 查看事务和锁
  • 乐观锁(版本号/时间戳)vs 悲观锁

第 28 章:MVCC 多版本并发控制 ​

  • 什么是 MVCC
  • MVCC 解决了什么问题
  • InnoDB 的 MVCC 实现原理
  • 隐藏列(DB_TRX_ID/DB_ROLL_PTR/DB_ROW_ID)
  • Undo Log 与版本链
  • ReadView(读视图)的生成规则
  • 快照读 vs 当前读
  • MVCC 在不同隔离级别下的行为差异
  • MVCC 与幻读

Phase 8:管理与运维 ​

第 29 章:用户与权限管理 ​

  • MySQL 的用户账号格式:'username'@'host'
  • 权限表(mysql.user/mysql.db/mysql.tables_priv/mysql.columns_priv)
  • CREATE USER 创建用户
  • 认证插件(mysql_native_password vs caching_sha2_password)
  • GRANT 授予权限
  • 权限级别:全局/数据库/表/列/存储过程
  • 常用权限列表(SELECT/INSERT/UPDATE/DELETE/CREATE/DROP/ALL 等)
  • REVOKE 撤销权限
  • SHOW GRANTS 查看权限
  • DROP USER 删除用户
  • 角色管理(MySQL 8.0+):CREATE ROLE/GRANT TO ROLE
  • ALTER USER 修改用户密码/锁定/解锁
  • 密码过期策略
  • 权限变更后 FLUSH PRIVILEGES 是否需要
  • 最佳安全实践

第 30 章:备份与恢复 ​

  • 为什么需要备份
  • 备份策略(全量/增量/差异)
  • 逻辑备份 vs 物理备份
  • mysqldump 完整使用指南
  • mysqldump 常用选项组合
  • mysqlpump 并行备份
  • 物理备份(冷备):直接复制数据目录
  • 二进制日志(binlog)备份
  • 时间点恢复(PITR)
  • mysqlbinlog 工具
  • XtraBackup 热备份简介
  • MySQL Enterprise Backup
  • 备份的验证与测试恢复
  • 自动化备份脚本设计思路

第 31 章:日志管理与监控 ​

  • MySQL 的日志类型总览
  • 错误日志(error log)
  • 通用查询日志(general query log)
  • 慢查询日志(slow query log)
  • 慢查询日志参数(long_query_time/min_examined_row_limit)
  • mysqldumpslow 分析慢查询
  • 二进制日志(binlog)详解
  • binlog 的三种格式(STATEMENT/ROW/MIXED)
  • binlog 的用途(复制/恢复)
  • 重做日志(redo log)
  • 撤销日志(undo log)
  • 中继日志(relay log)
  • 日志管理最佳实践(轮转/清理/监控磁盘空间)
  • 性能监控基础(SHOW STATUS/SHOW PROCESSLIST)
  • performance_schema 简介

Phase 9:性能优化 ​

第 32 章:Explain 执行计划详解 ​

  • 什么是执行计划,为什么需要理解
  • EXPLAIN 基本用法
  • EXPLAIN 输出的各列含义
  • id:查询中的执行顺序
  • select_type:SIMPLE/PRIMARY/SUBQUERY/DERIVED/UNION 等
  • table:访问的表名
  • partitions:匹配的分区
  • type(访问类型):从最优到最差的完整解读(system/const/eq_ref/ref/range/index/ALL)
  • possible_keys:可能用到的索引
  • key:实际使用的索引
  • key_len:索引使用的字节数
  • ref:索引列的比较对象
  • rows:预估扫描行数
  • filtered:过滤后的行数百分比
  • Extra:重要的额外信息(Using index/Using where/Using temporary/Using filesort)
  • EXPLAIN FORMAT=JSON 获取更多细节(cost 成本信息)
  • EXPLAIN ANALYZE(MySQL 8.0.18+):实际执行并测量时间
  • 如何判断查询是否需要优化

第 33 章:查询优化实战 ​

  • 查询优化的核心原则
  • 索引失效的常见场景(函数操作/隐式类型转换/LIKE 前缀模糊)
  • 覆盖索引优化
  • 子查询优化(改写为 JOIN 或 EXISTS)
  • LIMIT 大偏移量优化(子查询定位/游标分页)
  • COUNT 优化(COUNT(*) vs COUNT(col) vs COUNT(1))
  • ORDER BY 优化
  • GROUP BY 优化
  • DISTINCT 与 GROUP BY 的选择
  • JOIN 优化(小表驱动大表、索引列连接)
  • OR 条件的优化(改写为 UNION)
  • IN vs EXISTS 的选择
  • 分页查询优化
  • 大表 DDL 操作优化
  • 批量数据处理优化
  • 查询缓存(Query Cache 在 MySQL 8.0 中已移除)

第 34 章:服务器参数调优与硬件选择 ​

  • MySQL 可调优参数概览
  • InnoDB 缓冲池(innodb_buffer_pool_size):最重要的参数
  • InnoDB 日志文件大小(innodb_log_file_size)
  • 连接数(max_connections)
  • 表缓存(table_open_cache)
  • 线程缓存(thread_cache_size)
  • 排序缓冲区(sort_buffer_size)
  • 连接缓冲区(join_buffer_size)
  • 临时表大小(tmp_table_size/max_heap_table_size)
  • 操作系统层面的优化
  • 磁盘选择(SSD vs HDD)
  • 内存规划
  • CPU 规划
  • 网络延迟的影响
  • 云数据库(RDS/Cloud SQL)的特性

Phase 10:高级与前沿主题 ​

第 35 章:主从复制 ​

  • 什么是主从复制,有什么用(读写分离/备份/高可用)
  • 复制的工作原理
  • 基于二进制日志的复制
  • 异步复制 vs 半同步复制
  • 配置主库(master)
  • 配置从库(slave)
  • CHANGE MASTER TO 详细参数
  • START SLAVE/STOP SLAVE
  • SHOW SLAVE STATUS 解读
  • 复制延迟的原因与处理
  • 主从切换
  • GTID 复制(MySQL 5.6+)
  • 组复制(Group Replication)简介
  • 复制中的常见问题与排查

第 36 章:分区表与其他高级特性 ​

  • 表分区的概念与用途
  • 分区类型:RANGE/LIST/HASH/KEY
  • 子分区(Subpartitioning)
  • 分区管理(ADD/DROP/REORGANIZE/TRUNCATE PARTITION)
  • 分区的限制
  • 分区修剪(Partition Pruning)
  • 分区 vs 手动分表
  • 通用表空间(General Tablespace)
  • 压缩表(Table Compression)
  • 字符集与排序规则的深入话题
  • MySQL 8.0 新特性总览(窗口函数/CTE/降序索引/隐藏索引/角色/JSON_TABLE 等)

Phase 11:实战与总结 ​

第 37 章:综合实战:设计一个商城数据库 ​

  • 需求分析:商城系统需要哪些数据
  • ER 图设计:实体与关系分析
  • 表结构设计
    • 用户表(users)
    • 商品分类表(categories)
    • 商品表(products)
    • 订单表(orders)
    • 订单明细表(order_items)
    • 购物车表(cart)
    • 收货地址表(addresses)
    • 评价表(reviews)
  • 索引设计
  • 约束与外键设计
  • 存储过程设计(下单流程)
  • 触发器设计(自动更新库存)
  • 视图设计(订单汇总视图)
  • 数据填充与测试
  • 性能优化(EXPLAIN 分析订单查询)
  • 备份策略设计

第 38 章:常见面试题与总结 ​

  • 高频面试题分类
  • DDL/DML/DQL 基础题
  • 索引面试题
  • 事务与锁面试题
  • 性能优化面试题
  • 主从复制面试题
  • SQL 场景题(行列转换/TOP N/连续天数/树形查询)
  • 教程知识点回顾
  • MySQL 学习路线图
  • 进阶学习资源推荐
  • 最后的话

附录 ​

附录 A:MySQL 常用命令速查表 ​

  • DDL 命令(CREATE/ALTER/DROP/TRUNCATE/RENAME)
  • DML 命令(INSERT/UPDATE/DELETE/SELECT)
  • DCL 命令(GRANT/REVOKE)
  • TCL 命令(COMMIT/ROLLBACK/SAVEPOINT)
  • 实用工具命令(mysqldump/mysql/mysqlbinlog)
  • SHOW 命令分类汇总
  • 常用系统变量
  • 常用状态变量

附录 B:MySQL 安装 FAQ ​

  • Windows 安装常见问题
  • Linux 安装常见问题
  • Mac 安装常见问题
  • 连接问题排查
  • 字符集乱码修复
  • 密码丢失处理
  • 服务启动失败排查

附录 C:练习题参考答案 ​

  • 第01-08章练习题答案
  • 第09-12章练习题答案
  • 第13-18章练习题答案
  • 第19-21章练习题答案
  • 第22-25章练习题答案
  • 第26-28章练习题答案
  • 第29-38章练习题答案

最后提醒:数据库技能不是"看"出来的,是"敲"出来的。请务必跟着教程敲每一行代码,遇到错误不要慌,仔细阅读错误信息,它通常会告诉你问题出在哪里。祝你学有所成!

把零散知识,整理成可以反复走的路。