MySQL加行锁

行锁类型含义
记录锁(record lock)锁定一条记录,分为X和S,X锁是排它锁
间隙锁(gap lock)锁定一个区间内的记录,开区间
临健锁(next-key lock)是记录锁和间隙锁的结合体,锁定一个区间内的记录,左开右闭

行锁的存在是为了解决幻读的问题,在添加了临健锁的场景中如果使用间隙锁或记录锁能够解决幻读,则会进行锁降级。

临健锁降级锁场景
记录锁(record lock)1.聚簇索引/唯一索引等值查询且存在
2.聚簇索引/唯一索引范围查询且大于等于值存在,则该值锁对于的行使用记录锁,大于改行的记录会继续使用临健锁;
3.非唯一索引等值查询且存在,等值查询的值对于的主键索引会加记录锁;
间隙锁(gap lock)1.聚簇索引/唯一索引等值查询且不存在,将前一个和后一个记录区间加上间隙锁,即可避免当前值被其他事务创建;
2.聚簇索引/唯一索引小于查询,终止范围查询的记录并不需要包含在锁内,因此会降级为间隙锁;
3.聚簇索引/唯一索引范围查询小于等于查询且不存在,终止范围查询的记录并不需要包含在锁内,因此会降级为间隙锁;
4.非唯一索引等值查询且存在,终止范围查询的记录与等值查询的值之间会降级为间隙锁;
5.非唯一索引等值查询且不存在,终止范围查询的记录会降级为间隙锁;

对于有加锁特性的语句,如果查询条件没有命中索引,那么就需要全表扫描对每行记录都新增临健锁,相当于锁全表,因此一定要注意此类语句的执行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值