image.png
    接下来,我们看看查询的值不存在的情况
    直接看案例:
    非唯一索引等值查询2 - 图2
    会话 1 加锁变化过程如下:

    1. 先会对普通索引 b 加上 next-key lock,范围是(8,16];
    2. 但是由于查询的记录是不存在的,所以不会再额外加个间隙锁,但是 next-key lock 会退化为间隙锁,最终加锁范围是 (8,16)。

    会话 2 因为往间隙锁里插入了 b = 9 的记录,所以会被锁住,而 b = 16 是没有被加锁的,因此会话 3 的语句可以正常执行。