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、可能导致更多的锁等待和死锁情况

 

posted @ 2024-05-25 08:53  方达达  阅读(0)  评论(0)    收藏  举报