可重复读级别下的锁的基本规则


以下均针对可重复读级别下的锁规则。

具体案例参考 极客时间 - MySQL实战45讲 - 21 | 为什么我只改一行的语句,锁这么多?

原则 1:加锁的基本单位是 next-key lock(间隙锁+行锁)。next-key lock 是前开后闭区间。

原则 2:查找过程中访问到的对象才会加锁。

优化 1:索引上的等值查询,给唯一索引加锁的时候,next-key lock 退化为行锁。

优化 2:索引上的等值查询,向右遍历时且最后一个值不满足等值条件的时候,next-key lock 退化为间隙锁。

一个 bug:唯一索引上的范围查询会访问到不满足条件的第一个值为止。(现已修复)

又可以归纳为:

  • 查找过程中访问到的对象才会加锁,加锁的基本单位是next-key lock(前开后闭的区间)。
  • 等值查询:唯一索引会优化成行锁;非唯一索引会向右遍历时且最后一个值不满足等值条件的时候,next-key lock 退化为间隙锁。
  • 范围查询:无论是否是唯一索引,范围查询都需要访问到不满足条件的第一个值为止。

同时要注意lock in share mode(共享锁,读锁)与for update(独占锁,写锁)的区别。

共享锁:只会加在对应的索引上。

独占锁:对应的索引上,和对应的主键索引上。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM