什么是间隙锁, 间隙锁生成的时机
题目
什么是间隙锁?什么时候会产生?
参考答案
间隙锁锁的是记录之间的区间,而不是某一行记录。它主要用于防止幻读。
一般出现在:
- 可重复读隔离级别
- 范围更新、删除、当前读场景
可以顺带记住:
- 记录锁锁行
- 间隙锁锁区间
- Next-Key Lock = 记录锁 + 间隙锁
回答展开
- 间隙锁的关键不在于锁住了某条数据,而在于它锁的是一段区间,所以它主要用于防止幻读。
- 回答这题时最好把记录锁、间隙锁、Next-Key Lock 放在一起比较,这样更容易说清楚它们各自锁的对象和使用时机。
- 真正在业务里遇到它,往往不是主动去用,而是事务更新或范围查询时被 InnoDB 自动加上,然后带来锁等待或死锁问题。
实际场景
比如库存系统里有个事务按范围更新某批商品状态,如果不锁住这个范围,别的事务可能在中间插入新记录,导致当前事务前后看到的数据集合不一致。