Skip to content
极高困难

一句话答案

间隙锁锁住索引记录之间的间隙防止插入,配合记录锁组成临键锁(Next-Key Lock),在 RR 级别解决幻读。

核心要点

幻读: 同一事务两次查询返回不同的行数(新插入的行)

RR级别解决幻读: 快照读靠MVCC / 当前读靠间隙锁+临键锁

临键锁(Next-Key Lock): 记录锁 + 间隙锁 = 左开右闭区间

追问与易错

追问方向:

  • 间隙锁只在 RR 级别有吗?(是的,RC 没有间隙锁)
  • 间隙锁会导致死锁吗?举例?(两个事务互相锁住对方要插入的间隙)
  • 如何避免间隙锁导致的性能问题?(精确等值查询/降低隔离级别到 RC)

易错点:

  • ❌ "间隙锁锁的是行"——间隙锁锁的是索引记录之间的「间隙」,不锁已有记录
  • ❌ "RC 级别不会有锁冲突"——RC 仍有记录锁,只是没有间隙锁

💡 记忆锚点

幻读是"明明查过没人,回头一看多出几条"的灵异事件。间隙锁就是在两条记录之间拉起警戒线,不让新数据插队进来。临键锁 = 记录锁 + 间隙锁,锁住一个点和它左边的空档(前开后闭区间),RR 级别下当前读靠它防幻读,快照读靠 MVCC 防幻读。