select...for update,表锁?行锁?间隙锁?( 三 )


同理 , 根据 “优化 2”,索引上的等值查询,向右遍历时且最后一个值不满足等值条件的时候,next-key lock 退化为间隙锁 。
再分析这两条:

  • 当查询条件为普通索引,是间隙锁;
  • 当查询条件为索引 , 且为范围查询,是间隙锁;
同上,通过 “原则 1” 和 “优化 2” , 普通索引 是加的间隙锁 。
对于范围查询,个人认为上面的规则还不能完全覆盖,当时林晓斌针对这些规则,举了 4 个示例,然后进行详细剖析,包括间隙锁的范围区间计算 。
因为篇幅原因 , 这里就不再详细展开,如果后续需要,我也可能会单独出一篇 。
04 写在最后最后我们再回顾一下(RR 隔离级别):
  1. 当查询条件为主键和唯一索引,当有值时,是行锁;
  2. 当查询条件为主键和唯一索引 , 当为空值时,是间隙锁;
  3. 当查询条件为普通索引,是间隙锁;
  4. 当查询条件为索引,且为范围查询,是间隙锁;
  5. 当查询条件无索引,是表锁 。
至于间隙锁的范围 , 如何计算,本文没有详细阐述,但是上面的这些规则 , 就能基本满足我们日常工作需要 。




推荐阅读