ACID 与并发异常:亲手复现脏读、不可重复读、幻读
2026/8/22大约 2 分钟
分布式事务系列 · 阶段 0 · 事务地基 · 第 1/49 篇 · 🚧 占位待学
上一篇:《分布式事务学习总纲》
下一篇:《隔离级别与 MVCC:ReadView 与版本链》
学习大纲:《分布式事务学习总纲》
状态:待学习。 本文为占位文档:知识点清单、实验与验收标准已就绪,正文待按「先学习、先实验、再撰写」补全。
对应总纲单元:阶段 0 · 单元 0.1
一、本文要解决的问题
原子性、一致性、隔离性、持久性到底各自承诺了什么?脏读、不可重复读、幻读在真实数据库里分别长什么样?这是整个分布式事务大厦的地基——后面 Seata AT 的全局锁、undo log,全都是围绕这些并发异常打的仗。
二、知识点清单
- ACID 四特性各自的白话含义与实现分工(原子性靠 undo log,持久性靠 redo log,隔离性靠锁 + MVCC)
- 四种并发异常的时序:丢失修改、脏读、不可重复读、幻读
- SQL 标准四种隔离级别分别挡住哪些异常
- MySQL InnoDB 的 RR 与 SQL 标准 RR 的差异(快照读为什么"额外"防住了部分幻读)
三、动手实验(学习时必须真跑)
- 开两个 mysql 客户端、建测试表,在 RR 隔离级别下手工复现不可重复读与幻读(范围查询场景)
- 每一步都记录两个会话各自看到的输出,形成对照表
- 把 isolation 级别逐级调低,观察哪些异常在低级别下出现
四、验收标准(全部通过才进入下一篇)
五、写作提示(补正文时遵守)
- 开篇问题驱动;结构走「是什么 → 为什么 → 怎么做 → 背景知识」
- 所有代码、命令、输出必须先在本机跑通再写入,不得杜撰
- 版本口径以总纲环境清单为准(Apache Seata 2.6.0 / MySQL 8.0 / RocketMQ 5.x / Spring Boot 3.x)
- 涉及版本敏感结论时标注出处与时间
本篇完成后,把文首导航块的「🚧 占位待学」去掉,并在总纲处打卡。