Skip to content

什么是间隙锁, 间隙锁生成的时机 ​

题目 ​

什么是间隙锁?什么时候会产生?

参考答案 ​

间隙锁锁的是记录之间的区间,而不是某一行记录。它主要用于防止幻读。

一般出现在:

  • 可重复读隔离级别
  • 范围更新、删除、当前读场景

可以顺带记住:

  • 记录锁锁行
  • 间隙锁锁区间
  • Next-Key Lock = 记录锁 + 间隙锁

回答展开 ​

  • 间隙锁的关键不在于锁住了某条数据,而在于它锁的是一段区间,所以它主要用于防止幻读。
  • 回答这题时最好把记录锁、间隙锁、Next-Key Lock 放在一起比较,这样更容易说清楚它们各自锁的对象和使用时机。
  • 真正在业务里遇到它,往往不是主动去用,而是事务更新或范围查询时被 InnoDB 自动加上,然后带来锁等待或死锁问题。

实际场景 ​

比如库存系统里有个事务按范围更新某批商品状态,如果不锁住这个范围,别的事务可能在中间插入新记录,导致当前事务前后看到的数据集合不一致。

努力工作 享受生活