2022年4月25日 作者 zeroheart

在rr级别下,锁的问题

原则 1:加锁的基本单位是 next-key lock。是一个前开后闭区间。 原则 2:查找过程中访问到的对象才会加锁。 优化 1:索引上的等值查询,给唯一索引加锁的时候,next-key lock 退化为行锁。 优化 2:索引上的等值查询,向右遍历时且最后一个值不满足等值条件的时候,next-key lock 退化为间隙锁。 一个 bug:唯一索引上的范围查询会访问到不满足条件的第一个值为止。

求你了,别再说数据库锁的只是索引了!!!_Hollis的技术博客_51CTO博客

什么是间隙锁?到底锁了什么? – 简书 (jianshu.com)

理解的不是很透

1.rr级别下,有这些概念,record lock,gap lock,next-key lock

2.对于唯一索引的情况,锁会退化成record lock

3.对于其他情况,锁住前后区间和记录本身,就是next-key lock

https://www.zhihu.com/question/475361198/answer/2038500445

唯一索引

精确等值检索,Next-Key Locks就退化为记录锁,不会加gap锁

范围检索,会锁住where条件中相应的范围,范围中的记录以及间隙,换言之就是加上记录锁和gap 锁(至于区间是多大稍后讨论)。

不走索引检索,全表间隙加gap锁、全表记录加记录锁

非唯一索引

精确等值检索,Next-Key Locks 会对间隙加gap锁(至于区间是多大稍后讨论),以及对应检索到的记录加记录锁。

范围检索,会锁住where条件中相应的范围,范围中的记录以及间隙,换言之就是加上记录锁和gap 锁(至于区间是多大稍后讨论)。

非索引检索,全表间隙gap lock,全表记录record lock