精通 mysql 要掌握哪些

36 阅读3分钟

下面我给你准备一份 从入门到精通 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/树形/统计)✔✔✔(高级能力)