加载中...
幻读是数据库并发事务中的一种读异常现象:同一事务内两次执行相同的范围查询,由于其他事务插入或删除了符合条件的行,导致返回的记录集合发生变化,仿佛出现了幻影记录。

| 类型 | 并发读异常 |
| 对比概念 | 不可重复读 |
| 触发操作 | 范围内插入或删除 |
| 彻底防护 | 可串行化隔离级别 |
| 相关机制 | 范围锁 |
幻读(Phantom Read)是数据库并发事务中的一种读一致性异常。它指的是:在同一个事务内,两次执行相同条件的范围查询,由于期间有其他事务插入或删除了满足该条件的记录,导致两次查询返回的行集合不一致,仿佛凭空多出或消失了一些记录。
幻读与不可重复读容易混淆。不可重复读关注的是同一行数据在两次读取之间被修改;而幻读关注的是符合某个查询条件的记录数量或集合发生变化,即新增或删除了整行。幻读是衡量事务隔离级别强弱的重要标准之一,不同隔离级别对幻读的防护能力不同。
幻读在需要统计或校验数据集合的业务中影响明显,例如在校验唯一性、汇总金额或做库存判断时,若发生幻读可能导致基于过时集合做出错误决策。理解幻读有助于开发者根据业务对一致性的要求选择合适的事务隔离级别,在正确性与并发性能之间取得平衡。
问:幻读和不可重复读的区别是什么?答:不可重复读是同一行的值在两次读取间被改变,幻读是符合条件的行集合被增删而发生变化,一个针对单行,一个针对结果集。
问:如何彻底避免幻读?答:将事务隔离级别提升到可串行化,或借助范围锁与快照读机制,可以有效防止幻读,但通常会以牺牲部分并发性能为代价。

| 类型 | 并发读异常 |
| 对比概念 | 不可重复读 |
| 触发操作 | 范围内插入或删除 |
| 彻底防护 | 可串行化隔离级别 |
| 相关机制 | 范围锁 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧