什么是间隙锁(Lock GAP)

什么是间隙锁?

间隙锁是一个在索引记录之间的间隙上的锁。这是mysql数据库中的一种锁,它会出现在如下场景中,我们向表中新增一条数据age=20,这条数据在本来是没有的,在insert还没有提交的时候去select * from tableA a where a.age>15 and a.age<25,这个时候就会触发间隙锁,我们必须等待insert提交后才能执行select语句。

为什么会出现间隙锁?

在MySQL的innoDB引擎中,如果操作的是一个区间的数据,会锁住这个区间所有的记录,即使这个记录不存在,这个时候另一个会话去插入这个区间的数据,就必须等待上一个结束。
在这里插入图片描述
间隙锁的作用

保证某个间隙内的数据在锁定情况下不会发生任何变化。比如mysql默认隔离级别下的可重复读(RR)。 ps: 可重复读(RR):在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。

当使用唯一索引来搜索唯一行的语句时,不需要间隙锁定。如下面语句的id列有唯一索引,此时只会对id值为10的行使用记录锁。

select * from t where id = 10 for update;// 注意:普通查询是快照读,不需要加锁。如果,上面语句中id列没有建立索引或者是非唯一索引时,则语句会产生间隙锁。
在这里插入图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页
实付 9.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值