https://www.51cto.com/article/779551.html

在本文中,我们讨论了间隙锁的加锁规则。间隙锁是MySQL中用于保护范围查询和防止并发问题的重要机制,了解间隙锁的加锁规则对于优化数据库性能、减少数据冲突以及提高并发性能非常重要。

MySQL中的间隙是指索引中两个索引键之间的空间,间隙锁用于防止范围查询期间的幻读,确保查询结果的一致性和并发安全性。

概念解释

记录锁(Record Lock)

记录锁也被称为行锁,顾名思义,它是针对数据库中的行记录进行的锁定。

比如:

上面的SQL会在 id=1 的行记录上加上记录锁,以阻止其他事务插入,更新,删除这一行。

间隙锁(Gap Lock)

间隙锁就是对间隙加锁,用于锁定索引范围之间的间隙,以避免其他事务在这个范围内插入新的数据。间隙锁是排它锁,阻止了其他事务在间隙中插入满足条件的值,间隙锁仅在可重复读隔离级别下才有效。

关于间隙锁的详细讲解放在下文,这里只是先做个概念上的介绍。

临键锁(Next-Key Lock)

临键锁由记录锁和间隙锁组合而成,它在索引范围内的记录上加上记录锁,并在索引范围之间的间隙上加上间隙锁。这样可以避免幻读(Phantom Read)的问题,确保事务的隔离性。

切记:间隙锁的区间是左开右开的,临键锁的区间是左开右闭的。

间隙锁详解

间隙锁是保证临键锁正常运作的基础,理解间隙锁的概念对于深入理解这三种锁非常重要。

间隙锁的锁定范围是指在索引范围之间的间隙

举个简单例子来说明: