mysql Innodb锁机制:Next-Key Lock

https://www.cnblogs.com/zhoujinyi/p/3435982.html

深入了解mysql–gap locks,Next-Key Locks
https://blog.csdn.net/qq_20597727/article/details/87308709

gap锁的左开右闭原则
假如有会话1(已开启事务):
select * from intest where num>14 and num<16 for update;
即gap锁的范围是(14,16】

那么会话2的事务中只能插入num<14或num>=16的数据,否则需要等待会话1的锁的释放

注意,使用悲观锁,需要关闭mysql的自动提交功能,将 set autocommit = 0;
注意,mysql中的行级锁是基于索引的,如果sql没有走索引,那将使用表级锁把整张表锁住。

非唯一索引:

select * from tablename where age=10 for update;

10前和后的间隙不能插入数据

如果age是主键或者唯一索引,那么10前面和后面可以被插入数据

如果age是主键或唯一索引,且select * from tablename where age>10 for update;
那么10后面不可以被插入数据

总结:

1、主键或者唯一索引的等值查询for update 的情况下不会产生间隙锁,查询范围的情况下会产生间隙锁
2、非唯一索引等值查询会产生间隙锁,锁范围:(a,查询的值)(查询的值,b),a和b分别表示查询的值左右两边的数字。查询范围的情况下也会产生间隙锁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值