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 天 |
学习建议
- 按顺序学习:MySQL 知识有很强的依赖关系,理解前几章的数据类型和 DDL,后面的 DML 和 DQL 才能学得顺利
- 必须手敲代码:每个 SQL 示例都要自己在电脑上敲一遍,看一遍和敲一遍的效果天差地别
- 练习必须做:每章末尾的练习题是巩固知识的关键,参考答案见附录 C
- 理解原理比记住语法更重要:比如 InnoDB 的索引为什么用 B+ 树而不是红黑树?理解背后的原理能让你举一反三
- 遇到错误先自己排查:不要一看到报错就急着问人,试着读懂错误信息,用搜索引擎搜索,排查的过程本身就是最好的学习
- 搭建一个自己的数据库项目:学完 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章练习题答案
最后提醒:数据库技能不是"看"出来的,是"敲"出来的。请务必跟着教程敲每一行代码,遇到错误不要慌,仔细阅读错误信息,它通常会告诉你问题出在哪里。祝你学有所成!