03 - SQL 与事务
定位:事务是关系数据库的基石——理解 MVCC、隔离级别、ACID 实现,才能写出正确的高并发代码 面试高频度:⭐⭐⭐⭐⭐
一、板块在体系中的位置
┌──────────────────────────────────────┐
│ 01-架构与存储引擎 (地基) │
│ 02-索引与查询优化 (性能) │
└────────────────┬─────────────────────┘
↓
┌──────────────────────────────────────┐
│ 03-SQL与事务 (本板块) │
│ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │ MVCC │ │隔离 │ │ACID │ │
│ │ │ │级别 │ │实现 │ │
│ └──────┘ └──────┘ └──────┘ │
└───────┬──────────┬──────────────────┘
│ │
▼ ▼
┌──────────┐ ┌──────────┐
│ 04-锁 │ │ 05-日志 │
│ (并发) │ │ (持久化) │
└──────────┘ └──────────┘二、知识全景图
事务体系
├── 事务特性 (ACID)
│ ├── 原子性 (A) ── Undo Log 保证
│ ├── 一致性 (C) ── 应用层+数据库约束
│ ├── 隔离性 (I) ── 锁 + MVCC
│ └── 持久性 (D) ── Redo Log 保证
├── 并发问题
│ ├── 脏读 ── 读到未提交的数据
│ ├── 不可重复读 ── 同事务内两次读不一样(行被修改)
│ └── 幻读 ── 同事务内两次读结果集不一样(行被插入/删除)
├── 隔离级别
│ ├── READ UNCOMMITTED ── 都不防
│ ├── READ COMMITTED ── 防脏读 (RC)
│ ├── REPEATABLE READ ── 防脏读+不可重复读 (RR,MySQL 默认)
│ └── SERIALIZABLE ── 全防(性能极低)
└── MVCC 实现
├── 一致性非锁定读 ── 快照读
├── 版本链 ── Undo Log 中的历史版本
└── Read View ── 可见性判定规则三、子专题导航
| # | 主题 | 面试频率 | 核心内容 |
|---|---|---|---|
| **MVCC实现原理** | MVCC 实现原理 | ⭐⭐⭐⭐⭐ | 版本链、Read View、快照读与当前读 |
| **事务隔离级别** | 事务隔离级别 | ⭐⭐⭐⭐⭐ | 脏读/不可重复读/幻读、RC 与 RR 的 MVCC 差异 |
| **事务ACID实现** | 事务 ACID 实现 | ⭐⭐⭐⭐ | AID 分别由什么保证、C 的含义 |
四、核心考点速记
考点1:MVCC 解决什么问题?
MVCC = Multi-Version Concurrency Control
多版本并发控制
解决的问题:在"读"不阻塞"写"、"写"不阻塞"读"的前提下,
保证事务看到一致的数据快照
实现方式:每行数据有多个版本(Undo Log 版本链)
每个事务根据 Read View 决定看到哪个版本考点2:四种隔离级别解决的问题
| 隔离级别 | 脏读 | 不可重复读 | 幻读 |
|---|---|---|---|
| READ UNCOMMITTED | ❌ 可能 | ❌ 可能 | ❌ 可能 |
| READ COMMITTED | ✅ 避免 | ❌ 可能 | ❌ 可能 |
| REPEATABLE READ | ✅ 避免 | ✅ 避免 | ⚠️ InnoDB 通过间隙锁避免 |
| SERIALIZABLE | ✅ 避免 | ✅ 避免 | ✅ 避免 |
考点3:快照读 vs 当前读
sql
-- 快照读(Snapshot Read)—— 不加锁,读历史版本
SELECT * FROM users WHERE id = 1; -- 普通 SELECT 都是快照读
-- 当前读(Current Read)—— 加锁,读最新版本
SELECT * FROM users WHERE id = 1 FOR UPDATE; -- 排他锁
SELECT * FROM users WHERE id = 1 LOCK IN SHARE MODE; -- 共享锁
UPDATE users SET name = 'new' WHERE id = 1; -- 先当前读再写
DELETE FROM users WHERE id = 1; -- 先当前读再删
INSERT INTO users ... -- 直接写📚 相关文件
- 下游板块:**锁机制**
- 下游板块:**日志系统**
- 上游板块:**架构与存储引擎**
- ← 返回 **设计文档**