MySQL8 RC select... for update的锁

在RC隔离级别下,selectforupdate会根据索引的存在与否以及类型施加不同类型的锁。没有索引时,会对全表加IX锁;存在唯一索引则加IX和X锁;普通索引情况加两把X锁。IX是意向排他锁,表示可能随后会加行锁。但无索引且记录存在时,MySQL会全表扫描并即时解锁不满足条件的记录,这违反了2PL原则。
摘要由CSDN通过智能技术生成

RC模式下 select for update的锁

记录是否存在where条件的索引类型表锁类型行锁类型
不存在无论什么索引IX意向排他锁
存在唯一索引IX意向排他锁两把X排他行锁(分别对应唯一索引记录,主键记录
存在主键索引IX意向排他锁一把X排他行锁(对应主键记录)
存在普通索引IX意向排他锁两把X排他行锁(分别对应普通索引记录,主键记录)
存在无索引IX意向排他锁一把X排他行锁(对应主键记录)

特殊说明:

  • IX意向排他锁:表锁,不影响插入
  • where条件无索引且记录存在不是表锁的原因:
    • 若列上没有索引,MySQL会走聚簇(主键)索引进行全表扫描过滤。每条记录都会加上X锁。但是,为了效率考虑,MySQL在这方面进行了改进,在扫描过程中,若记录不满足过滤条件,会进行解锁操作。同时优化违背了2PL原则。

参考并感谢:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rock_fish

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值