MySQL的间隙锁

发布时间 2023-05-26 23:13:25作者: 幸运的小伙子

什么是间隙锁?

间隙锁就是在MySQL的一个范围锁,对某个不存在数据的范围进行加锁,加锁后,不能在这个范围内插入数据;在可重复读事务隔离级别下,默认使用的是next-key Lock(行锁+间隙锁);

间隙锁是为了解决什么问题?

间隙锁就是MySQL在Innodb存储引擎在可重复读的事务隔离级别下为了解决当前读的情形下幻读的问题;

什么情形下MySQL会加间隙锁?

在当前读才会出现加锁的情况,快照读是不会进行加锁的;大致分为聚簇索引字段、普通索引字段、普通字段,精准查询,范围查询。间隙锁是两个记录之间的空隙,当唯一索引精准匹配时,next-key lock会优化成行锁;当普通索引和唯一索引范围查询时,则会加next-key lock(行锁+间隙锁);当唯一索引或普通索引匹配不到值时,则next-key lock会优化成间隙锁;