下面给你一份面向工作的 MySQL 学习知识清单 。建议以 MySQL 8.0 + InnoDB 为主学习,因为目前企业中使用最广泛。
一、MySQL 学习目标
以后工作中使用 MySQL,核心目标是:
- 会写常见和复杂 SQL
- 会设计合理的表结构
- 会建立和优化索引
- 会分析慢 SQL
- 理解事务、锁、MVCC
- 知道 MySQL 的存储原理
- 会做基本的备份、恢复、权限管理
- 能处理常见线上问题
二、数据库基础知识
1. 数据库基本概念
需要掌握:
- 数据库 Database
- 数据表 Table
- 字段 Column
- 行记录 Row
- 主键 Primary Key
- 外键 Foreign Key
- 索引 Index
- 视图 View
- 事务 Transaction
- 存储过程 Procedure
- 触发器 Trigger
2. 关系型数据库理论
了解:
- 关系型数据库 RDBMS
- SQL 标准
- 表与表之间的关系:
- 一对一
- 一对多
- 多对多
- 实体关系模型 ER 图
- 数据库范式:
- 第一范式 1NF
- 第二范式 2NF
- 第三范式 3NF
- 反范式设计
三、MySQL 安装与环境
1. 安装方式
需要会:
- Windows 安装 MySQL
- Linux 安装 MySQL
- Docker 安装 MySQL
- 使用 MySQL 8.0
- 配置环境变量
- 启动、停止、重启 MySQL 服务
2. 常用客户端工具
建议熟悉:
- MySQL 命令行客户端
- Navicat
- DBeaver
- DataGrip
- MySQL Workbench
3. 配置文件
需要了解:
my.cnfmy.ini- MySQL 配置文件位置
- 常见配置项:
portdatadircharacter_set_servercollation_servermax_connectionsinnodb_buffer_pool_size
四、SQL 基础
1. SQL 分类
必须掌握:
DDL:数据定义语言
用于操作数据库结构。
sql
CREATE
ALTER
DROP
TRUNCATE
DML:数据操作语言
用于操作数据。
sql
INSERT
UPDATE
DELETE
DQL:数据查询语言
用于查询数据。
sql
SELECT
DCL:数据控制语言
用于权限控制。
sql
GRANT
REVOKE
TCL:事务控制语言
用于事务控制。
sql
COMMIT
ROLLBACK
SAVEPOINT
五、数据库与表操作
1. 数据库操作
需要掌握:
sql
CREATE DATABASE
DROP DATABASE
SHOW DATABASES
USE database_name
2. 表操作
需要掌握:
sql
CREATE TABLE
DROP TABLE
ALTER TABLE
DESC table_name
SHOW TABLES
SHOW CREATE TABLE
3. 修改表结构
需要掌握:
- 添加字段
- 删除字段
- 修改字段类型
- 修改字段名
- 添加索引
- 删除索引
- 添加约束
- 删除约束
例如:
sql
ALTER TABLE user ADD COLUMN age INT;
ALTER TABLE user MODIFY COLUMN name VARCHAR(100);
ALTER TABLE user DROP COLUMN age;
六、MySQL 数据类型
1. 整数类型
需要掌握:
TINYINTSMALLINTMEDIUMINTINTBIGINT
重点:
- 有符号和无符号:
SIGNED/UNSIGNED - 自增:
AUTO_INCREMENT
2. 小数类型
必须掌握:
DECIMALFLOATDOUBLE
工作中注意:
- 金额、余额、价格必须使用
DECIMAL - 不要用
FLOAT或DOUBLE存钱
例如:
sql
price DECIMAL(10, 2)
3. 字符串类型
需要掌握:
CHARVARCHARTEXTMEDIUMTEXTLONGTEXT
区别:
CHAR:定长VARCHAR:变长TEXT:大文本
常见使用:
sql
username VARCHAR(50)
content TEXT
4. 日期时间类型
需要掌握:
DATETIMEDATETIMETIMESTAMPYEAR
重点区别:
DATETIME范围更大,不受时区影响TIMESTAMP会受时区影响
工作中常用:
sql
create_time DATETIME
update_time DATETIME
5. JSON 类型
MySQL 5.7 之后支持:
sql
data JSON
适合存储半结构化数据,但不要滥用。
七、字符集与排序规则
必须掌握:
1. 字符集
常见字符集:
utf8utf8mb4
工作建议:
sql
utf8mb4
因为 utf8mb4 支持 emoji 和完整 Unicode。
2. 排序规则 Collation
常见:
utf8mb4_general_ciutf8mb4_unicode_ciutf8mb4_0900_ai_ci
注意:
ci表示大小写不敏感cs表示大小写敏感
3. 常见问题
需要了解:
- 中文乱码
- emoji 存储失败
- 字符集不一致导致索引失效
- 表、字段、连接字符集不一致
八、约束
必须掌握:
1. 主键约束
sql
PRIMARY KEY
特点:
- 唯一
- 非空
- 一张表只能有一个主键
2. 唯一约束
sql
UNIQUE
用于保证字段唯一,例如手机号、邮箱。
3. 非空约束
sql
NOT NULL
4. 默认值
sql
DEFAULT
5. 外键约束
sql
FOREIGN KEY
工作中外键不一定常用,很多公司会在业务层维护关系。
6. CHECK 约束
MySQL 8.0 支持:
sql
CHECK (age > 0)
九、增删改查
1. 插入数据
需要掌握:
sql
INSERT INTO table_name VALUES (...);
INSERT INTO table_name(column1, column2) VALUES (...);
批量插入:
sql
INSERT INTO user(name, age)
VALUES
('Tom', 18),
('Jerry', 20);
2. 查询数据
必须熟练:
sql
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT
3. 修改数据
sql
UPDATE user SET name = 'Tom' WHERE id = 1;
注意:
- 修改数据必须加
WHERE - 线上禁止无条件更新
4. 删除数据
sql
DELETE FROM user WHERE id = 1;
注意区分:
sql
DELETE
TRUNCATE
DROP
区别:
DELETE删除数据,可带条件TRUNCATE清空整张表DROP删除整张表结构
十、查询条件
必须掌握:
sql
WHERE
AND
OR
NOT
IN
NOT IN
BETWEEN AND
LIKE
IS NULL
IS NOT NULL
EXISTS
注意:
sql
= NULL
是错误写法,应该使用:
sql
IS NULL
十一、排序、分页、去重
1. 排序
sql
ORDER BY create_time DESC
2. 分页
sql
LIMIT 0, 10
LIMIT 10 OFFSET 0
3. 去重
sql
SELECT DISTINCT name FROM user;
4. 深分页问题
例如:
sql
SELECT * FROM user ORDER BY id LIMIT 1000000, 10;
这种 SQL 在大表中性能差。
优化方式:
sql
SELECT * FROM user
WHERE id > 1000000
ORDER BY id
LIMIT 10;
十二、聚合函数与分组
必须掌握:
sql
COUNT()
SUM()
AVG()
MAX()
MIN()
分组查询:
sql
SELECT department_id, COUNT(*)
FROM employee
GROUP BY department_id;
分组后过滤:
sql
SELECT department_id, COUNT(*)
FROM employee
GROUP BY department_id
HAVING COUNT(*) > 10;
注意:
WHERE是分组前过滤HAVING是分组后过滤
十三、多表查询
必须掌握:
1. 内连接
sql
SELECT *
FROM user u
INNER JOIN orders o ON u.id = o.user_id;
2. 左连接
sql
SELECT *
FROM user u
LEFT JOIN orders o ON u.id = o.user_id;
3. 右连接
sql
SELECT *
FROM user u
RIGHT JOIN orders o ON u.id = o.user_id;
4. 自连接
一张表自己关联自己。
5. 多表关联优化
需要注意:
- 关联字段要建立索引
- 小表驱动大表
- 避免过多 JOIN
- 注意 JOIN 条件是否正确
- 注意笛卡尔积
十四、子查询
需要掌握:
1. WHERE 子查询
sql
SELECT * FROM user
WHERE id IN (
SELECT user_id FROM orders
);
2. FROM 子查询
sql
SELECT *
FROM (
SELECT user_id, COUNT(*) cnt
FROM orders
GROUP BY user_id
) t;
3. EXISTS 子查询
sql
SELECT *
FROM user u
WHERE EXISTS (
SELECT 1 FROM orders o WHERE o.user_id = u.id
);
4. 子查询优化
需要了解:
INEXISTSJOIN
不同场景性能可能不同,要结合执行计划分析。
十五、常用函数
1. 字符串函数
sql
CONCAT()
SUBSTRING()
LENGTH()
CHAR_LENGTH()
TRIM()
REPLACE()
LOWER()
UPPER()
2. 日期函数
sql
NOW()
CURDATE()
CURTIME()
DATE_FORMAT()
DATE_ADD()
DATE_SUB()
DATEDIFF()
3. 数学函数
sql
ROUND()
CEIL()
FLOOR()
ABS()
RAND()
4. 条件函数
sql
IF()
IFNULL()
NULLIF()
CASE WHEN
例如:
sql
SELECT
CASE
WHEN score >= 90 THEN '优秀'
WHEN score >= 60 THEN '及格'
ELSE '不及格'
END AS level
FROM student;
十六、索引
索引是 MySQL 工作中非常重要的知识点。
1. 索引的作用
索引用于提高查询速度。
优点:
- 加快查询
- 加快排序
- 加快分组
- 加快关联查询
缺点:
- 占用磁盘空间
- 降低写入速度
- 索引过多会影响维护成本
2. 常见索引类型
需要掌握:
- 主键索引
- 唯一索引
- 普通索引
- 联合索引
- 前缀索引
- 全文索引
- 空间索引
3. 创建索引
sql
CREATE INDEX idx_user_name ON user(name);
联合索引:
sql
CREATE INDEX idx_user_age_name ON user(age, name);
唯一索引:
sql
CREATE UNIQUE INDEX uk_user_phone ON user(phone);
4. B+ 树索引
必须理解:
- MySQL InnoDB 默认使用 B+ 树索引
- B+ 树适合范围查询
- 非叶子节点存索引值
- 叶子节点存数据或主键值
5. 聚簇索引与二级索引
InnoDB 中:
- 主键索引是聚簇索引
- 数据和主键索引存放在一起
- 二级索引叶子节点存的是主键值
- 通过二级索引查数据可能发生回表
6. 回表
例如有索引:
sql
INDEX(name)
查询:
sql
SELECT age FROM user WHERE name = 'Tom';
如果 age 不在索引中,需要通过主键再查一次完整数据,这就是回表。
7. 覆盖索引
如果查询字段都在索引中,就不需要回表。
例如:
sql
CREATE INDEX idx_name_age ON user(name, age);
查询:
sql
SELECT name, age FROM user WHERE name = 'Tom';
这就是覆盖索引。
8. 最左前缀原则
联合索引:
sql
INDEX(a, b, c)
可以命中:
sql
WHERE a = ?
WHERE a = ? AND b = ?
WHERE a = ? AND b = ? AND c = ?
不一定能很好命中:
sql
WHERE b = ?
WHERE c = ?
WHERE b = ? AND c = ?
9. 索引失效场景
必须掌握:
- 对索引字段使用函数
sql
WHERE DATE(create_time) = '2024-01-01'
- 隐式类型转换
sql
WHERE phone = 13800138000
如果 phone 是字符串,应该写:
sql
WHERE phone = '13800138000'
- 左模糊查询
sql
WHERE name LIKE '%Tom'
- 使用
OR不当 - 联合索引不满足最左前缀
- 使用
!=、<>、NOT IN - 字段区分度太低
- 排序字段和索引不匹配
十七、执行计划 EXPLAIN
必须掌握。
1. 查看执行计划
sql
EXPLAIN SELECT * FROM user WHERE id = 1;
MySQL 8.0 可以使用:
sql
EXPLAIN ANALYZE SELECT * FROM user WHERE id = 1;
2. 重点字段
需要看懂:
idselect_typetabletypepossible_keyskeykey_lenrefrowsfilteredExtra
3. type 性能顺序
大致从好到差:
text
system
const
eq_ref
ref
range
index
ALL
重点:
- 看到
ALL一般表示全表扫描,需要关注 - 看到
Using filesort要关注排序 - 看到
Using temporary要关注临时表 - 看到
Using index通常表示使用覆盖索引
十八、事务
必须掌握。
1. 事务四大特性 ACID
- Atomicity:原子性
- Consistency:一致性
- Isolation:隔离性
- Durability:持久性
2. 事务控制
sql
START TRANSACTION;
COMMIT;
ROLLBACK;
3. 自动提交
sql
SHOW VARIABLES LIKE 'autocommit';
SET autocommit = 0;
SET autocommit = 1;
4. 事务隔离级别
必须掌握:
- READ UNCOMMITTED
- READ COMMITTED
- REPEATABLE READ
- SERIALIZABLE
MySQL InnoDB 默认:
text
REPEATABLE READ
5. 并发问题
需要理解:
- 脏读
- 不可重复读
- 幻读
- 丢失更新
十九、锁机制
工作中非常重要。
1. 锁类型
需要掌握:
- 全局锁
- 表锁
- 行锁
- 间隙锁 Gap Lock
- 临键锁 Next-Key Lock
- 记录锁 Record Lock
- 意向锁
- 元数据锁 MDL
2. 当前读与快照读
快照读:
sql
SELECT * FROM user WHERE id = 1;
当前读:
sql
SELECT * FROM user WHERE id = 1 FOR UPDATE;
SELECT * FROM user WHERE id = 1 LOCK IN SHARE MODE;
UPDATE user SET name = 'Tom' WHERE id = 1;
DELETE FROM user WHERE id = 1;
3. 死锁
需要掌握:
- 死锁产生原因
- 如何查看死锁
sql
SHOW ENGINE INNODB STATUS;
- 如何避免死锁:
- 固定访问顺序
- 缩短事务时间
- 合理建立索引
- 避免大事务
- 死锁后业务重试
二十、MVCC
MVCC 是 MySQL InnoDB 的核心。
需要理解:
- 什么是 MVCC
- MVCC 如何实现非锁定读
- undo log
- read view
- 事务 ID
- 版本链
- 快照读
- 当前读
重点区别:
- READ COMMITTED:每次查询生成新的 Read View
- REPEATABLE READ:事务第一次查询生成 Read View,后续复用
二十一、InnoDB 存储引擎
MySQL 工作中主要学习 InnoDB。
1. 常见存储引擎
了解:
- InnoDB
- MyISAM
- MEMORY
- CSV
- Archive
重点掌握 InnoDB。
2. InnoDB 特点
- 支持事务
- 支持行锁
- 支持外键
- 支持 MVCC
- 崩溃恢复能力强
3. InnoDB 核心结构
需要了解:
- 表空间
- 数据页 Page
- 区 Extent
- 段 Segment
- Buffer Pool
- Redo Log
- Undo Log
- Change Buffer
- Doublewrite Buffer
- Adaptive Hash Index
二十二、MySQL 日志
必须掌握。
1. Error Log
错误日志,用于排查 MySQL 启动、运行错误。
2. General Log
通用查询日志,记录所有 SQL,一般生产环境不长期开启。
3. Slow Query Log
慢查询日志,用于分析慢 SQL。
需要会配置:
sql
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'long_query_time';
4. Binary Log
简称 binlog,用于:
- 主从复制
- 数据恢复
- 审计
需要了解格式:
- STATEMENT
- ROW
- MIXED
工作中一般推荐:
text
ROW
5. Redo Log
InnoDB 重做日志,用于保证事务持久性。
6. Undo Log
用于:
- 事务回滚
- MVCC 版本链
7. Relay Log
主从复制中,从库使用的中继日志。
二十三、SQL 优化
工作中高频使用。
1. 优化方向
需要掌握:
- 表结构优化
- 索引优化
- SQL 写法优化
- 分页优化
- JOIN 优化
- 排序优化
- 分组优化
- 慢查询分析
2. 常见优化原则
建议掌握:
- 不要
SELECT * - 查询字段尽量明确
- WHERE 条件字段建立合适索引
- 避免索引字段参与函数计算
- 避免隐式类型转换
- 避免大事务
- 避免一次删除、更新大量数据
- 合理使用联合索引
- 避免过多索引
- 使用覆盖索引
- 大表深分页使用游标式分页
- 先过滤再 JOIN
- 尽量让排序使用索引
3. 慢 SQL 分析流程
常见流程:
- 查看慢查询日志
- 找到慢 SQL
- 使用
EXPLAIN - 分析是否使用索引
- 分析扫描行数
- 分析是否有排序、临时表
- 优化 SQL 或索引
- 再次验证执行计划和耗时
二十四、表设计规范
工作中非常重要。
1. 常见字段设计
通常业务表会有:
sql
id
create_time
update_time
create_by
update_by
deleted
version
status
2. 主键设计
常见主键方案:
- 自增 ID
- UUID
- 雪花算法 ID
- 业务唯一 ID
建议:
- 单机系统可以用自增 ID
- 分布式系统常用雪花算法 ID
- 不建议直接用很长的字符串做主键
3. 字段设计原则
建议:
- 字段尽量设置
NOT NULL - 给字段设置默认值
- 金额使用
DECIMAL - 时间使用
DATETIME - 状态字段使用
TINYINT - 长文本单独放表
- 大字段不要频繁查询
- 字段命名清晰
4. 表设计原则
需要掌握:
- 适当范式化
- 适当反范式
- 避免超宽表
- 避免大字段和高频字段混在一起
- 合理设计索引
- 保留扩展字段时要谨慎
- 不滥用 JSON
二十五、权限管理与安全
1. 用户管理
需要掌握:
sql
CREATE USER
DROP USER
ALTER USER
例如:
sql
CREATE USER 'app_user'@'%' IDENTIFIED BY 'password';
2. 授权
sql
GRANT SELECT, INSERT, UPDATE ON db_name.* TO 'app_user'@'%';
3. 回收权限
sql
REVOKE SELECT ON db_name.* FROM 'app_user'@'%';
4. 查看权限
sql
SHOW GRANTS FOR 'app_user'@'%';
5. 安全重点
需要掌握:
- 最小权限原则
- 禁止应用使用 root 用户
- 防止 SQL 注入
- 使用预编译 SQL
- 定期修改密码
- 生产环境限制远程访问
- 备份文件加密
- 敏感字段加密或脱敏
二十六、备份与恢复
必须了解,DBA 方向必须熟练。
1. 逻辑备份
常用工具:
bash
mysqldump
常见参数:
bash
mysqldump -u root -p --single-transaction db_name > backup.sql
2. 物理备份
常见工具:
- Percona XtraBackup
- MySQL Enterprise Backup
3. 备份类型
需要掌握:
- 全量备份
- 增量备份
- 差异备份
- 定时备份
- 冷备份
- 热备份
4. 数据恢复
需要掌握:
- 从 SQL 文件恢复
- 从物理备份恢复
- 利用 binlog 做时间点恢复
5. 工作重点
一定要记住:
只会备份不够,必须定期演练恢复。
二十七、主从复制
进阶必学。
1. 主从复制作用
用于:
- 读写分离
- 数据备份
- 高可用
- 灾备
- 扩展读性能
2. 复制原理
需要理解:
- 主库写 binlog
- 从库 IO 线程拉取 binlog
- 从库写 relay log
- 从库 SQL 线程重放 relay log
3. 复制模式
需要了解:
- 异步复制
- 半同步复制
- 组复制 MGR
4. GTID
MySQL 5.6 之后支持 GTID。
需要了解:
- GTID 是什么
- GTID 复制的优势
- 如何通过 GTID 做主从切换
5. 主从问题
需要掌握:
- 主从延迟
- 数据不一致
- 复制中断
- binlog 文件过大
- 从库只读配置
- 主从切换
二十八、高可用与架构
了解即可,架构或 DBA 方向重点掌握。
1. 常见架构
- 单机 MySQL
- 主从架构
- 一主多从
- 双主架构
- MGR 组复制
- InnoDB Cluster
- 分库分表架构
2. 常见组件
了解:
- Keepalived
- MHA
- Orchestrator
- ProxySQL
- MyCat
- ShardingSphere
- Canal
3. 读写分离
需要了解:
- 主库写
- 从库读
- 主从延迟问题
- 强一致读问题
4. 分库分表
需要了解:
- 垂直分库
- 水平分库
- 垂直分表
- 水平分表
- 分片键选择
- 跨库 JOIN 问题
- 分布式事务问题
- 全局唯一 ID
二十九、监控与排查
工作中很实用。
1. 常用命令
需要熟悉:
sql
SHOW PROCESSLIST;
SHOW FULL PROCESSLIST;
SHOW STATUS;
SHOW VARIABLES;
SHOW ENGINE INNODB STATUS;
2. 系统库
需要了解:
information_schemaperformance_schemamysqlsys
3. 重要监控指标
需要关注:
- QPS
- TPS
- 慢查询数量
- 连接数
- 活跃线程数
- 锁等待
- 死锁次数
- Buffer Pool 命中率
- 磁盘 IO
- CPU 使用率
- 内存使用率
- 主从延迟
- binlog 大小
- 表空间大小
4. 常用监控工具
了解:
- Prometheus
- Grafana
- Percona Toolkit
- pt-query-digest
- Zabbix
- MySQL Exporter
三十、MySQL 8.0 新特性
建议学习。
1. 窗口函数
例如:
sql
ROW_NUMBER()
RANK()
DENSE_RANK()
LAG()
LEAD()
2. CTE 公共表表达式
sql
WITH t AS (
SELECT * FROM user
)
SELECT * FROM t;
3. 递归查询
MySQL 8.0 支持递归 CTE。
4. 角色管理
sql
CREATE ROLE
GRANT role TO user
5. 隐藏索引
sql
ALTER TABLE user ALTER INDEX idx_name INVISIBLE;
6. 函数索引
MySQL 8.0 支持表达式索引。
7. JSON 增强
MySQL 8.0 对 JSON 支持更好。
8. Atomic DDL
MySQL 8.0 支持原子 DDL,DDL 操作更安全。
三十一、开发中 MySQL 相关知识
如果你以后做 Java、后端开发,这部分很重要。
1. JDBC
需要掌握:
- JDBC 连接 MySQL
- Driver 配置
- PreparedStatement
- ResultSet
- 事务提交与回滚
2. 连接池
常见连接池:
- HikariCP
- Druid
- C3P0
需要理解:
- 最大连接数
- 最小空闲连接
- 连接超时
- 空闲超时
- 连接泄漏
3. ORM 框架
常见:
- MyBatis
- MyBatis-Plus
- JPA
- Hibernate
需要注意:
- 避免 N+1 查询
- 避免一次查询过多数据
- 合理分页
- 批量插入
- 动态 SQL
- 事务传播机制
4. SQL 注入
必须掌握:
错误方式:
sql
SELECT * FROM user WHERE name = '" + name + "'
正确方式:
sql
PreparedStatement
或 MyBatis 参数绑定:
sql
WHERE name = #{name}
不要使用:
sql
${name}
除非非常清楚风险。
三十二、常见业务场景
工作中建议重点练习这些。
1. 用户表设计
字段:
- id
- username
- phone
- password
- status
- create_time
- update_time
重点:
- 手机号唯一索引
- 密码加密存储
- 状态字段设计
2. 订单表设计
字段:
- id
- order_no
- user_id
- amount
- status
- pay_time
- create_time
重点:
- 订单号唯一索引
- 用户 ID 索引
- 创建时间索引
- 金额用
DECIMAL
3. 库存扣减
需要考虑:
- 并发扣库存
- 防止超卖
- 悲观锁
- 乐观锁
- 事务隔离
- 幂等性
4. 支付场景
需要考虑:
- 金额精度
- 支付状态流转
- 重复回调
- 幂等处理
- 事务一致性
5. 软删除
常见字段:
sql
deleted TINYINT DEFAULT 0
查询时:
sql
WHERE deleted = 0
6. 乐观锁
常见字段:
sql
version INT
更新时:
sql
UPDATE product
SET stock = stock - 1, version = version + 1
WHERE id = 1 AND version = 10;
三十三、常见坑
必须注意:
- 不要用 root 用户连接业务系统
- 不要在生产环境随便执行
DELETE、UPDATE - 执行修改语句前先写
SELECT确认条件 - 金额不要用浮点数
- 大表不要随便加字段
- 大表不要随便建索引
- 不要一次删除几百万数据
- 不要长期持有事务
- 不要滥用
SELECT * - 不要让索引字段参与函数运算
- 不要忽视字符集
- 不要忽视时区问题
- 不要只备份不恢复测试
- 不要把大量 JSON 当关系型数据用
- 不要创建过多索引
- 不要认为索引一定越多越好
- 不要忽视慢查询日志
- 不要忽视主从延迟
- 不要忽视死锁重试
- 不要在事务中做耗时外部调用
三十四、学习顺序建议
建议按这个顺序学:
第一阶段:基础 SQL
重点:
- 数据库、表操作
- 增删改查
- 条件查询
- 排序分页
- 分组聚合
- 多表 JOIN
- 子查询
- 常用函数
目标:
能独立写常见业务 SQL。
第二阶段:表设计与索引
重点:
- 数据类型选择
- 主键设计
- 表结构设计
- 索引类型
- 联合索引
- 最左前缀原则
- 覆盖索引
- 索引失效
- EXPLAIN
目标:
能设计基本业务表,并能优化简单慢 SQL。
第三阶段:事务与锁
重点:
- ACID
- 隔离级别
- MVCC
- 行锁
- 间隙锁
- 临键锁
- 死锁
- 悲观锁
- 乐观锁
目标:
能处理并发更新、库存扣减、重复提交等问题。
第四阶段:性能优化
重点:
- 慢查询日志
- 执行计划
- SQL 优化
- 索引优化
- 深分页优化
- 大表优化
- 参数调优基础
目标:
能定位并优化常见性能问题。
第五阶段:运维与架构
重点:
- 备份恢复
- binlog
- 主从复制
- 读写分离
- 高可用
- 分库分表
- 监控告警
目标:
能理解企业中 MySQL 的运行方式和常见架构。
三十五、建议做的练习项目
你可以练习设计这些数据库:
- 学生管理系统
- 图书管理系统
- 用户登录注册系统
- 博客系统
- 电商订单系统
- 秒杀库存系统
- 支付流水系统
- 权限管理系统
- 日志查询系统
- 后台管理系统
重点练习:
- 表设计
- 索引设计
- SQL 查询
- 事务处理
- 慢 SQL 优化
- 数据备份恢复
三十六、面试常问知识点
以后找工作时,MySQL 常问:
- MySQL 索引底层为什么用 B+ 树?
- 什么是聚簇索引?
- 什么是回表?
- 什么是覆盖索引?
- 联合索引的最左前缀原则是什么?
- 哪些情况会导致索引失效?
- EXPLAIN 怎么看?
- MySQL 有哪些事务隔离级别?
- 什么是 MVCC?
- 什么是脏读、不可重复读、幻读?
- InnoDB 如何解决幻读?
- MySQL 默认隔离级别是什么?
- 什么是间隙锁、临键锁?
- 如何排查死锁?
- binlog、redo log、undo log 有什么区别?
- MySQL 主从复制原理是什么?
- 主从延迟怎么解决?
- 如何优化慢 SQL?
- 大表分页怎么优化?
- 如何设计订单表?
- 如何防止库存超卖?
- DELETE、TRUNCATE、DROP 的区别?
- CHAR 和 VARCHAR 的区别?
- DATETIME 和 TIMESTAMP 的区别?
- MySQL 如何做备份和恢复?
总结
如果你是为了以后工作,MySQL 最核心的学习路线是:
text
SQL 基础
↓
表设计
↓
索引
↓
执行计划
↓
事务
↓
锁
↓
MVCC
↓
慢 SQL 优化
↓
备份恢复
↓
主从复制
↓
高可用与分库分表
其中最重要的是:
- SQL 查询能力
- 表结构设计能力
- 索引设计能力
- 慢 SQL 分析能力
- 事务和锁的理解能力
这几部分掌握好,基本就能满足大部分后端开发岗位的 MySQL 要求。