知识卡片

事务隔离级别四级体系与四种异常现象

结构图卡

内容

事务隔离级别本质上是在”并发性能”和”数据正确性”之间选一个刻度, 四个级别对应四种越来越严格的暴露程度限制,恰好逐级消除四种数据 不一致现象里的一种。读脏数据是最松的一类问题:一个事务读到了另一个 事务尚未提交、甚至最终会被回滚的中间值,一旦对方回滚,前者的所有 后续操作都建立在一个从未真实存在过的数据上;”幻读”是它的一种特殊 表现(一个事务按范围条件读取/修改一批数据,另一个事务并发插入了 符合该范围的新行,前者对这批数据的整体性假设被打破)。读提交数据 级别通过只允许读已提交的数据,消除了脏读;但它没有解决不可重复读: 同一个事务里两次读同一个数据,中间若有其他事务提交了对这个数据的 修改,两次读到的值会不一样。可重复读级别进一步保证同一事务内对 同一数据的多次读取结果一致,但幻读依然可能发生(可重复读约束的是 “已读到的具体行”的值不变,管不住”新插入的行”)。可串行化是最严格 的级别,直接要求调度整体等价于某个串行调度,因此四种异常现象全部 被排除,但代价是并发度被压到最低。四个级别、四种异常呈现出清晰的 “层层解决”结构:级别越高解决的异常种类越多,但相应地牺牲的并发度 也越多,选择哪个级别本质是业务对”正确性容忍度”和”并发性能需求” 的具体权衡,没有一个万能的默认选项。

结构图

flowchart TD
    A[读未提交<br/>脏读✓不可重复读✓幻读✓丢失修改✓] --> B[读提交<br/>脏读✗不可重复读✓幻读✓丢失修改✓]
    B --> C[可重复读<br/>脏读✗不可重复读✗幻读✓丢失修改✗]
    C --> D[可串行化<br/>脏读✗不可重复读✗幻读✗丢失修改✗]
    A -.并发度.-> E[最高]
    D -.并发度.-> F[最低]

参考来源

- 位置:《数据库原理(微课版)》第11章《事务处理技术》11.4节"事务隔离 级别"(源文件:_epub-src/index_split_007.html) - 结论依据:原文明确SQL-92定义的四种隔离级别(读未提交/读提交/可 重复读/可串行化),并给出表11-4"隔离级别及其可避免出现的数据 不一致现象",说明"读未提交数据隔离级别太低,无法避免所有的数据 不一致现象出现,而可串行化隔离级别可避免所有数据不一致现象出现", 因此可以推出四级隔离级别与四种异常现象的层层递进对应关系。 - 原始内容:读未提交数据隔离级别太低,无法避免所有的数据不一致 现象出现,而可串行化隔离级别可避免所有数据不一致现象出现…… 较低的隔离级别可以增加并发,但代价是降低事务操作的隔离性,甚至 数据的一致性。