InnoDB 通过两种核心机制解决幻读问题:多版本并发控制(MVCC) 和 间隙锁(Gap Lock),具体实现依赖于事务的隔离级别(默认是 可重复读(Repeatable Read, RR))。以下是详细解释:
1. 多版本并发控制(MVCC)
-
核心思想:
InnoDB 为每个事务提供一个一致性视图(Consistent Read View),基于事务开始时的数据库快照。即使其他事务修改或插入了新数据,当前事务看到的仍然是快照中的数据,避免了“幻读”。 -
如何工作:
-
普通 SELECT 操作(快照读):
在可重复读(RR)隔离级别下,事务的第一次 SELECT 会生成一个快照,后续所有 SELECT 都基于这个快照,因此不会看到其他事务提交的新插入数据(避免幻读)。 -
示例:
事务 A 第一次查询WHERE id > 100
返回 10 条记录;事务 B 插入一条id=150
的记录并提交。事务 A 再次执行相同查询时,仍只看到原来的 10 条记录。
-