next-keylock备忘
大黄 Lv4

名词解释

解释: 间隙锁(Gap Lock)和行锁合称 NextKey Lock 【前开后闭的区间】
间隙锁存在的场景和原因: 当为可重复读的时候,就会用到间隙锁,用来解决幻读问题

加锁规则

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

同时,有一个注意点。

1
2
3
4
5
-- mysql会认为查询完接下来就要更新数据,会顺便给主键索引满足条件的行上锁
select ... for update;

-- 仅对当前索引上锁
select ... lock in share mode;
  • Post title:next-keylock备忘
  • Post author:大黄
  • Create time:2023-10-24 14:17:24
  • Post link:https://huangbangjing.cn/2023/10/24/next-keylock备忘/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.