三张图片告诉你:啥是脏读、不可重复读、幻读

三张图片告诉你:啥是脏读、不可重复读、幻读
最新回答
只有背影

2021-07-31 11:56:00

脏读、不可重复读、幻读是数据库事务并发执行时可能遇到的问题,具体解释如下

  1. 脏读

    • 定义:在事务执行过程中,一个事务可以读取到另一个事务未提交的数据。
    • 问题:由于读取到的数据可能不是最终状态,因此会影响数据的准确性。
    • 示例图片描述:假设有两个事务A和B,A事务在更新某条记录但尚未提交时,B事务查询到了A事务未提交的数据,这就是脏读。
  2. 不可重复读

    • 定义:在同一事务中,多次查询同一数据,由于其他事务的修改导致查询结果可能不一致。
    • 问题:同一事务多次查询同一数据时,由于数据可能被其他事务修改,导致查询结果不一致。
    • 示例图片描述:事务T1在第一次查询某条记录时,得到的结果是R1;但在T1尚未提交时,另一事务T2修改了该记录并提交,导致T1再次查询时得到的结果是R2,这就是不可重复读。
  3. 幻读

    • 定义:在同一事务中,根据相同条件查询时,由于其他事务的插入或删除操作,导致查询结果与预期逻辑不一致。
    • 问题:幻读通常发生在范围查询中,由于并发事务的插入或删除操作,导致查询结果集发生变化。
    • 示例图片描述:事务T1在查询满足条件C的记录时,得到了一系列结果集R;但在T1尚未提交时,另一事务T2插入了一条满足条件C的新记录并提交,导致T1再次根据条件C查询时,得到了一个包含新记录的结果集R’,这就是幻读。

总结:脏读、不可重复读和幻读都是数据库事务并发执行时可能遇到的问题,它们分别涉及到读取未提交数据、同一事务多次查询结果不一致以及范围查询结果集变化等问题。为了解决这些问题,数据库系统提供了不同的隔离级别和机制,如MVCC等,以确保数据的一致性和并发性能。