数据库 & SQL 知识体系

这一部分按 基础 → 进阶 → 高阶 三层组织,既覆盖 SQL 语言本身,也覆盖 InnoDB 存储引擎、索引、事务、执行计划这些在面试与生产中真正拉开差距的内容。

除非特别说明,全部示例基于 MySQL 8.0 + InnoDB;涉及 PostgreSQL / Oracle 的差异会单独标注。

学习路线

层次主题目标
基础SQL 基础语法逻辑执行顺序、三值逻辑、过滤排序分页、内置函数、DML
进阶连接查询内连接 / 外连接 / 自连接 / 半连接,以及 ONWHERE 的本质区别
进阶聚合与分组聚合函数、GROUP BY / HAVING、条件聚合、行列转换
进阶子查询与 CTE标量 / 行 / 表子查询、相关子查询、EXISTSWITH 与递归 CTE
高阶窗口函数排名、累计、移动窗口、LAG / LEAD、frame 边界语义
高阶索引原理B+ 树、聚簇索引、回表、联合索引最左前缀、覆盖索引、索引失效
高阶事务与锁ACID、隔离级别、MVCC、记录锁 / 间隙锁 / 临键锁、死锁
高阶执行计划与调优EXPLAIN、连接算法、深分页、慢查询定位、统计信息
高阶表结构设计范式与反范式、数据类型选型、约束、分区与分库分表

统一示例库

下面这套表贯穿各篇示例,可直接建库跑通。

CREATE TABLE department (
    id   INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    UNIQUE KEY uk_name (name)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

CREATE TABLE employee (
    id            INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    name          VARCHAR(50)    NOT NULL,
    department_id INT UNSIGNED   NULL,
    manager_id    INT UNSIGNED   NULL,           -- 自关联:上级
    salary        DECIMAL(12, 2) NOT NULL DEFAULT 0,
    hired_at      DATE           NOT NULL,
    KEY idx_dept_salary (department_id, salary), -- 联合索引,后面反复用到
    KEY idx_hired (hired_at)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

CREATE TABLE orders (
    id          BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    user_id     INT UNSIGNED   NOT NULL,
    amount      DECIMAL(12, 2) NOT NULL,
    status      TINYINT        NOT NULL DEFAULT 0,  -- 0 待付款 1 已付款 2 已取消
    created_at  DATETIME       NOT NULL,
    KEY idx_user_created (user_id, created_at)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

如何使用这份资料

  1. 先把基础篇里的逻辑执行顺序NULL 三值逻辑吃透,它们是后面所有内容的地基;
  2. 进阶三篇(连接 / 分组 / 子查询)配合 LeetCode 题目练手;
  3. 高阶部分不要死记结论,重点理解 B+ 树结构 → 回表代价 → 优化器如何选择这条主线。
上次更新:
贡献者: Joe