select...for update,表锁?行锁?间隙锁?( 三 )
同理 , 根据 “优化 2”,索引上的等值查询,向右遍历时且最后一个值不满足等值条件的时候,next-key lock 退化为间隙锁 。
再分析这两条:
- 当查询条件为普通索引,是间隙锁;
- 当查询条件为索引 , 且为范围查询,是间隙锁;
对于范围查询,个人认为上面的规则还不能完全覆盖,当时林晓斌针对这些规则,举了 4 个示例,然后进行详细剖析,包括间隙锁的范围区间计算 。
因为篇幅原因 , 这里就不再详细展开,如果后续需要,我也可能会单独出一篇 。
04 写在最后最后我们再回顾一下(RR 隔离级别):
- 当查询条件为主键和唯一索引,当有值时,是行锁;
- 当查询条件为主键和唯一索引 , 当为空值时,是间隙锁;
- 当查询条件为普通索引,是间隙锁;
- 当查询条件为索引,且为范围查询,是间隙锁;
- 当查询条件无索引,是表锁 。