间隙锁和临键锁

间隙锁(Gap Lock)

间隙锁,锁的就是两个值之间的空隙。Mysql默认级别是repeatable-read,有办法解决幻读问题吗?间隙锁 在某些情况下可以解决幻读问题。
假设account表里数据如下:
 
那么间隙就有 id 为 (3,10),(10,20),(20,正无穷) 这三个区间,
在Session_1下面执行 update account set name = 'zhuge' where id > 8 and id <18;,则其他Session没 法在这个范围所包含的所有行记录(包括间隙行记录)以及行记录所在的间隙 里插入或修改任何数据,即id在 (3,20]区间都无法修改数据,注意最后那个20也是包含在内的。
在Session_1下面执行 select * from account  where id =15 for update,则其他Session没法 (10,20)的间隙里插入或修改任何数据。
在Session_1下面执行 select * from account  where id =22 for update,则其他Session没法 (20,z正无穷)的间隙里插入或修改任何数据。
间隙锁是在可重复读隔离级别下才会生效。

临键锁(Next-key Locks)
Next-Key Locks是行锁与间隙锁的组合。像上面那个例子里的这个(3,20]的整个区间可以叫做临键锁。只要包含了边界就是临键锁了。
要想解决幻读,锁住这个区间的某个不存在的值,那么这个区间里面就不可以做任何的修改插入操作了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值