2026-05-20 18:22:05
脏读、不可重复读、幻读是数据库事务并发执行时因隔离级别不足导致的三种异常现象,核心区别在于数据状态变化类型和影响范围:
脏读
指一个事务读取了另一个未提交事务修改的数据。例如,事务A修改某行数据但未提交,事务B读取该数据后,事务A回滚导致B读取到无效数据。关键点在于数据未提交即被读取,破坏了事务的原子性。此现象仅发生在未提交读(READ_UNCOMMITTED)隔离级别下,其他级别通过锁定机制避免。
不可重复读
指同一事务内多次读取同一数据,因其他事务修改导致结果不一致。例如,事务A首次读取某行数据后,事务B修改并提交该数据,事务A再次读取时发现值变化。核心是数据被修改,影响范围为单行数据。此现象出现在已提交读(READ_COMMITTED)及以上隔离级别,但可重复读(REPEATABLE_READ)通过锁定已读行避免。
幻读
指同一事务内多次查询满足条件的记录集,因其他事务插入或删除导致结果集数量变化。例如,事务A查询年龄为30的用户后,事务B插入新用户并提交,事务A再次查询时发现多出记录。关键在于新增或删除导致记录数变化,影响范围为整个结果集。此现象在可重复读(REPEABLE_READ)隔离级别下仍可能发生,需串行化(SERIALIZABLE)级别通过锁表彻底避免。
三者核心差异:
实际应用中,需根据业务对数据一致性的要求选择隔离级别,平衡并发性能与数据准确性。