在 MySQL 的 InnoDB 存储引擎中,可重复读(Repeatable Read, 简称 RR)隔离级别下解决幻读问题,并不是靠单一机制完成的,而是根据不同的读取方式(快照读 vs 当前读),采用了两种不同的机制。 简单来说,核心结论是: 1. 针对 快照读(普通 SELECT),通过 MVCC(多版本并发控制) 解决。 2. 针对 当前读(加锁的 SELECT、UPDATE、DELETE),通过 Next-Key Lock(临键锁 = 记录锁 + 间隙锁) 解决。 以下是详细的原理解析: --- 1. 什么是幻读? 幻读是指:事务 A 按照某个条件查询出一些记录,此时事务 B 插入(Insert) 了一条符合该条件的新记录并提交。事务 A 再次以相同的条件进行查询时,发现多出了原本不存在的“幻影”记录。 --- 2. 快照读(Snapshot Read)下的解决方案:MVCC 快照读指的是不加锁的普通查询,例如:。 在 RR 隔离级别下,InnoDB 使用 MVCC(多版本并发控制) 来防止幻读: Read View(读视图)的生成时机:在 RR 级别下,事务在第一次执行...