CSNotesCSNotes
MySQL
Java
SSM
Redis
学习路线
TODO
实用工具
GitHub
MySQL
Java
SSM
Redis
学习路线
TODO
实用工具
GitHub
  • 第一章 SQL 语法

    • 一、MySQL 语法基础
    • 二、多表查询与笛卡尔积
    • 三、JOIN 类型与算法
    • 四、LIKE 通配符与正则
    • 五、GROUP BY/HAVING /窗口函数
    • 六、字段类型与选型
    • 七、约束、主键与 DDL 语法
    • 八、SQL 实用函数
    • 九、TRUNCATE
    • 十、数据建模范式
    • 十一、exists 子查询
    • 十二、select *
  • 第二章 SQL 执行

    • 一、一条建表语句是如何执行的?
    • 二、EXPLAIN 执行计划
    • 三、一条 DELETE 语句在干什么?
    • 四、EXPLAIN 各列的含义
    • 五、JOIN 执行算法
  • 第三章 存储结构

    • 一、字符集与 CHAR/VARCHAR 存储
    • 二、最大行大小 65535 bytes
    • 三、为什么 VARCHAR 上限是 16383?
    • 四、表、页与 Page Header 概念
    • 五、InnoDB 行格式 COMPACT
    • 六、磁盘空间管理器
  • 第四章 索引

    • 一、为什么是 B+ 树?
    • 二、B+ 树插入、分裂、合并的完整过程
    • 三、容量计算:一颗高度为 3 的 B+ 树能存多少条数据?
    • 四、索引分类(聚簇/二级/联合/覆盖)
    • 五、联合索引 + 最左匹配原则
    • 六、索引失效 7 大场景
    • 七、索引创建策略:三星索引法
    • 八、执行计划
  • 第五章 事务

    • 一、事务
    • 二、事务的本质(内核视角)
    • 三、MVCC 多版本并发控制
    • 四、死锁四条件
    • 五、一条 INSERT 语句背后在干吗?
  • 第六章 日志

    • 一、Redo Log 结构
    • 二、Undo Log
    • 三、预写日志 WAL(Redo/Undo)
    • 四、两阶段提交 2PC
    • 五、崩溃恢复
    • 六、三种刷盘组合性能与一致性 tradeoff
  • 第七章 锁

    • 一、锁

一、一条建表语句是如何执行的?

Step1:连接器:mysql -uroot -p走 TCP 三次握手->查 mysql.user 表验证账号密码

Step2:查询缓存(8.0 已废弃):key=SQL 原文哈希,value=结果集,只要表上有任何 UPDATE/INSERT 就全部 invalidate,命中率极低,8.0 模块已经删除。

Step3:解析器 Parser:词法分析(把 SELECT/id/=切 token)+ 语法分析(按 SQL 语法规则 buildAST 抽象语法树,语法报错会在这一步报 You have an error in your SQL syntax)

Step4:预处理器:检查 AST 里引用的库/表/列是否存在、权限是否够

Step5:优化器 Optimizer:生成多个执行计划、选代价最低的(代价=IO cost+CPU cost,默认 IO cost 权重=1,CPU cost 权重=0.2,SHOW STATUS 看 Last_query_cost)

Step6:执行器 Executor:循环调用存储引擎的接口index_read()/index_next()/read_record()取行

Step7:把结果集写 Net Buffer->发 TCP 给客户端

create table db.test(
String name,
int age
);

首先,数据库会默认执行 begin 语句,新建一个事务。

循环每一列,如果是索引列,就建 B+ 树

如果建表失败就回滚,否则就提交

编辑此页
上次更新: 2026/9/20 17:36
Next
二、EXPLAIN 执行计划