mysql实战之间隙锁

什么是间隙锁?

间隙锁,锁的就是两个值之间的空隙,间隙锁是在可重复读隔离级别下才会生效。

比如下列数据库表中:

id为4到8中就有间隙,id为11到40中也有间隙,间隙锁就是在这两个间隙中加锁,其他事务无法插入值。

mysql为什么要设计这个锁呢?

还记得mysql默认的事务隔离级别是什么吗?

答案是 可重复读(Repeatableread),那么这个隔离级别有什么数据安全问题呢?看下面表格

隔离级别

脏读(Dirty Read)

不可重复读(NonRepeatable Read)

幻读(Phantom Read)

读未提交(Read uncommitted)

可能

可能

可能

读已提交(Read committed)

不可能

可能

可能

可重复读(Repeatableread)

不可能

不可能

可能

可串行化

(Serializable)

不可能

不可能

不可能

对!会出现幻读,那么什么是幻读?

幻读(Phantom Reads)就是事务A读取到了事务B提交的新增数据

那么有了间隙锁就解决了这个问题!因为当A事务操作的当前操作的间隙加锁了,B事务就无法对这个间隙新增数据了,A事务也就不会读取到B新增的数据了

问题复现

幻读不好复现,按理论上来说间隙锁是可以避免幻读的

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值