数据库系统中,当事务T1在可重复读隔离级别下执行`SELECT * FROM table WHERE age>20`得到5条记录后,事务T2插入两条age=25的新记录并提交。接着T1再次执行相同查询,若要求避免幻读,数据库系统应如何实现?
答案解析
核心考点:隔离级别的实现机制与幻读的防范。需理解锁机制与MVCC的区别。
解题思路:
1. 可重复读隔离级别下,标准实现方式:
- MySQL采用Next-Key Locking(记录锁+间隙锁)
- PostgreSQL采用SSI(可序列化快照隔离)
2. 题目强调'要求避免幻读',因此需选择能绝对防止幻读的机制
3. 间隙锁(选项C)在查询时锁定age>20的范围,阻止其他事务插入
选项分析:
A. 错误,隔离级别不能动态升级
B. 错误,快照隔离无法防止写入冲突
C. 正确,间隙锁是防止幻读的标准实现
D. 错误,MVCC本身不阻止新数据插入
易错点:混淆可重复读与可序列化的实现差异
正确答案:C