什么是脏读、不可重复读和幻读?

推荐答案

  • 脏读(Dirty Read):一个事务读取了另一个未提交事务的数据。如果未提交的事务回滚,那么读取到的数据就是无效的,称为脏数据。

  • 不可重复读(Non-Repeatable Read):一个事务在多次读取同一数据时,由于其他事务的修改或删除操作,导致前后读取的数据不一致。

  • 幻读(Phantom Read):一个事务在多次查询同一范围的数据时,由于其他事务的插入操作,导致前后查询到的结果集不一致。

本题详细解读

脏读(Dirty Read)

脏读发生在一个事务读取了另一个未提交事务的数据时。如果未提交的事务最终回滚,那么读取到的数据就是无效的,称为脏数据。脏读通常发生在事务隔离级别为READ UNCOMMITTED的情况下。

示例

如果事务A回滚,事务B读取到的数据就是无效的。

不可重复读(Non-Repeatable Read)

不可重复读发生在一个事务在多次读取同一数据时,由于其他事务的修改或删除操作,导致前后读取的数据不一致。不可重复读通常发生在事务隔离级别为READ COMMITTED的情况下。

示例

-- -------------------- ---- -------
-- ---
------
------ ------- ---- ----- ----- -- - -- -- -----

-- ---
------
------ ----- --- ------- - ------- - --- ----- -- - --
-------

-- ---
------ ------- ---- ----- ----- -- - -- -- --------------

事务A在两次读取同一数据时,由于事务B的修改操作,导致结果不一致。

幻读(Phantom Read)

幻读发生在一个事务在多次查询同一范围的数据时,由于其他事务的插入操作,导致前后查询到的结果集不一致。幻读通常发生在事务隔离级别为REPEATABLE READ的情况下。

示例

-- -------------------- ---- -------
-- ---
------
------ - ---- ----- ----- --- - --- -- -----

-- ---
------
------ ---- ----- ------ ---- ------ --------- ----
-------

-- ---
------ - ---- ----- ----- --- - --- -- ---------------

事务A在两次查询同一范围的数据时,由于事务B的插入操作,导致结果集不一致。

纠错
反馈