Phantom Read
幻读是同一事务内两次范围查询返回不同行数(其他事务插入/删除了匹配行),是可重复读级别仍存在的异常。
用途
理解范围查询在并发下的幻行问题及防御(next-key lock / SSI)。
机制
事务 A 两次 SELECT WHERE age>20,事务 B 在其间 INSERT age=25 并提交,A 第二次查询多出一行(幻行)。防御:谓词锁、next-key lock(MySQL)、SSI(PostgreSQL)。
用例
- 并发异常分析
- 范围查询隔离
- 锁策略设计
幻读是同一事务内两次范围查询返回不同行数(其他事务插入/删除了匹配行),是可重复读级别仍存在的异常。
理解范围查询在并发下的幻行问题及防御(next-key lock / SSI)。
事务 A 两次 SELECT WHERE age>20,事务 B 在其间 INSERT age=25 并提交,A 第二次查询多出一行(幻行)。防御:谓词锁、next-key lock(MySQL)、SSI(PostgreSQL)。