下面我给你准备一份 从入门到精通 MySQL 必须掌握的完整知识体系,
每一条都包含:含义说明 + 典型示例 + 技巧/注意点。
你照着这些能力点学完,就是能独立搞后端、RBAC、报表、权限、复杂业务 SQL 的“真正精通”。
内容我分成 10 大板块,循序渐进:
🚀 一、基础语法(CRUD)——任何人必须掌握的基本功
✔ 1. select 查询
含义:从表中读取数据。
SELECT id, username FROM user WHERE status = 1 ORDER BY id DESC LIMIT 10;
技巧:
where条件过滤order by排序limit分页
✔ 2. insert 插入
INSERT INTO user (username, age) VALUES ('zhang', 18);
✔ 3. update 更新
UPDATE user SET age = 20 WHERE id = 1;
✔ 4. delete 删除
DELETE FROM user WHERE id = 1;
注意:生产慎用 delete,根据 ID 删除才安全。
🚀 二、表结构设计(建表)——真正能看出你是不是专业
✔ 必学要点:字段类型 / 主键 / 索引 / 外键 / 默认值
✔ 示例:经典用户表
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
password VARCHAR(100) NOT NULL,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
status TINYINT DEFAULT 1
);
讲解:
| 类型 | 用途 |
|---|---|
| INT | 整数,用于 id |
| VARCHAR | 字符串 |
| DATETIME | 时间 |
| TINYINT | 小数字,常用于状态字段比如 0/1 |
| AUTO_INCREMENT | 自动增长主键 |
🚀 三、JOIN 关联查询(核心)——精通的关键能力
JOIN 是你写业务、RBAC、后台系统、报表时 100% 会用的。
✔ 1. INNER JOIN:两边都要匹配
SELECT u.username, r.role_name
FROM user u
INNER JOIN user_role ur ON u.id = ur.user_id
INNER JOIN role r ON r.id = ur.role_id;
✔ 2. LEFT JOIN:左侧全显示,右侧匹配不到填 null(最常用)
SELECT u.username, r.role_name
FROM user u
LEFT JOIN user_role ur ON u.id = ur.user_id
LEFT JOIN role r ON r.id = ur.role_id;
🚀 四、子查询(Subquery)——复杂查询必备
✔ 示例:查询拥有“admin”角色的用户
SELECT * FROM user
WHERE id IN (
SELECT user_id FROM user_role WHERE role_id =
(SELECT id FROM role WHERE role_key = 'admin')
);
🚀 五、分组与聚合(Group By)——做报表/统计必须掌握
✔ 聚合函数:count / sum / avg / max / min
例:统计每个角色有多少用户
SELECT role_id, COUNT(*) AS user_count
FROM user_role
GROUP BY role_id;
例:按日期统计用户数量
SELECT DATE(create_time) AS day, COUNT(*) AS total
FROM user
GROUP BY DATE(create_time);
🚀 六、索引(Index)——查询快慢的关键
✔ 建立索引
CREATE INDEX idx_username ON user(username);
✔ 索引的作用
- 提高查询速度
- 但写入(insert/update/delete)会变慢
必学:
- 单列索引
- 联合索引
- 前缀索引
- 覆盖索引
🚀 七、事务(Transaction)——银行转账、订单支付等必须用
✔ 示例:用户余额转账
START TRANSACTION;
UPDATE user SET balance = balance - 100 WHERE id = 1;
UPDATE user SET balance = balance + 100 WHERE id = 2;
COMMIT;
如果失败:
ROLLBACK;
🚀 八、锁(Lock)——并发时防止脏写、脏读
✔ 例:for update 悲观锁
SELECT balance
FROM user
WHERE id = 1
FOR UPDATE;
锁住这条记录,别人不能改。
🚀 九、执行计划(Explain)——分析 SQL 性能
你写的 SQL 慢不慢,靠它判断。
EXPLAIN SELECT * FROM user WHERE username = 'zhang';
你要会看:
- type(all / index / range / ref / const)
- key(使用的是哪个索引)
- rows(扫描行数)
🚀 十、复杂业务 SQL 组合能力(真正高级)
这是“精通”和“会”之间的区别。
✔ 1. RBAC 权限查询(你现在在用)
SELECT DISTINCT p.*
FROM permission p
JOIN role_permission rp ON p.id = rp.permission_id
JOIN user_role ur ON ur.role_id = rp.role_id
WHERE ur.user_id = ?;
✔ 2. 菜单树查询(后台管理常用)
SELECT * FROM menu ORDER BY parent_id, id;
前端根据 parent_id 构造树。
✔ 3. 递归查询(WITH RECURSIVE)
WITH RECURSIVE cte AS (
SELECT id, name, parent_id
FROM menu
WHERE id = 1
UNION ALL
SELECT m.id, m.name, m.parent_id
FROM menu m
JOIN cte ON m.parent_id = cte.id
)
SELECT * FROM cte;
✔ 4. 统计报表(环比、同比)
例:统计每天新增用户
SELECT DATE(create_time) AS day, COUNT(*) AS total
FROM user
GROUP BY day;
🎯 总结:想精通 MySQL,你必须掌握的 10 项能力
| 能力 | 是否必须 |
|---|---|
| 基础 CRUD | ✔✔✔ |
| 表结构设计 | ✔✔✔ |
| JOIN | ✔✔✔(最重要) |
| 子查询 | ✔✔ |
| 聚合/分组 | ✔✔ |
| 索引优化 | ✔✔✔(关键点) |
| 事务控制 | ✔✔ |
| 锁机制 | ✔✔ |
| 执行计划 | ✔✔✔(性能优化核心) |
| 复杂 SQL(RBAC/树形/统计) | ✔✔✔(高级能力) |