mysql 间隙锁
定义
间隙锁(Gap Lock)锁定的是索引记录之间的"间隙",而不是记录本身。它阻止其他事务在这个间隙中插入新的记录。
原理
锁定范围:当执行范围查询时(如WHERE id BETWEEN 10 AND 20),InnoDB不仅会锁定符合条件的现有记录(使用记录锁),还会锁定10到20之间的"间隙"(即使这个范围内没有记录)。
防止幻读:通过锁定间隙,防止其他事务在这个范围内插入新记录,从而避免了幻读现象。
特点
1、不锁定现有记录:只锁定不存在的记录之间的间隙
2、与记录锁配合使用:通常与记录锁(Record Lock)一起形成临键锁(Next-Key Lock)
3、仅适用于可重复读隔离级别:在READ COMMITTED隔离级别下不会使用间隙锁
4、非唯一索引适用:对唯一索引的等值查询通常不需要间隙锁
优点
1、有效防止幻读
2、保证事务隔离性
缺点
1、降低并发性能,因为锁定了不需要修改的数据范围
2、可能导致更多的锁等待和死锁情况

浙公网安备 33010602011771号