数据库原理与应用 第 9 章 · 第二节
课程 › 第 9 章 › 第二节 并发控制丢失更新与脏读不可重复读与幻象读小结 版式
第 9 章 数据库并发控制与封锁 · 第二节

数据的不一致性

并发操作不加控制时,会出现的四种数据不一致性
本 节 知 识 点
  1. 06并发操作与并发控制
  2. 07丢失更新与读脏数据
  3. 08不可重复读与幻象读
  4. 09四种数据不一致性
06
第 9 章 · 第二节 · 课件第 13 页

并发操作与并发控制

多个用户同时操作同一数据是并发操作,合理调度它们的技术是并发控制。

课件第 13 页

重 点

并发控制不是禁止并发,而是让并发执行的结果与事务逐个执行的结果相同。

07
第 9 章 · 第二节 · 课件第 14、15 页合并重做

丢失更新与读脏数据

修改被覆盖,或者读到了未提交的数据。

9.3 并发控制与数据的不一致性课件第 14、15 页合并

丢失更新与读脏数据

丢失更新 两个事务都读到 1000,先后写回
时间事务 T1事务 T2
t1读取 R = 1000读取 R = 1000
t2取走 100,写入 R = 900
t3取走 200,写入 R = 800

最后 R = 800,T1 的修改被 T2 覆盖了

读脏数据 读到了未提交的数据
时间事务 T1R事务 T2
t1R = R - 100,未提交900
t2900读取 R = 900
t3ROLLBACK1000

T1 回滚后 R 恢复为 1000,T2 读到的 900 是脏数据

  • 丢失更新:一个事务的修改结果被另一个事务覆盖,好像丢失了一样
  • 读脏数据:一个事务读取了另一个事务未提交、后来又被撤销的数据

知道更多

MySQL 修改数据时自动给行加 X 锁,两个事务同时修改同一行,后一个要等待,实验 3-1 验证这一点。

08
第 9 章 · 第二节 · 课件第 16、17 页合并重做

不可重复读与幻象读

同一事务中两次读到的值不同,或行数不同。

9.3 并发控制与数据的不一致性课件第 16、17 页合并

不可重复读与幻象读

不可重复读 同一数据两次读的值不同
时间事务 T1事务 T2
t1读取 R = 1000
t2R = R - 100,提交
t3再次读取 R = 900
幻象读 同样条件两次查到的行数不同
时间事务 T1事务 T2
t1查询 R < 1000,3 行
t2插入一行,提交
t3再次查询 R < 1000,4 行
  • 不可重复读:两次查询之间,数据被另一个事务修改并提交了
  • 幻象读:两次查询之间,另一个事务插入或删除了满足条件的行
  • 两种情况读到的都是已提交的数据,这是与读脏数据的区别

练一练

两次查询之间,另一个事务插入了一行满足条件的记录并提交。这属于哪一种问题?
  1. A读脏数据
  2. B不可重复读
  3. C幻象读
答案 C

行的值没有变,是行数变了,属于幻象读。

09
第 9 章 · 第二节 · 课件第 18 页

四种数据不一致性

读脏数据读的是未提交的数据,不可重复读和幻象读读的是已提交的数据。

课件第 18 页

重 点

丢失更新是两个写操作之间的问题,另外三种都是读操作遇到了别的事务的写操作。

保山学院·人工智能教研室·曹鼎鼎