会话1加锁变化过程如下: 加锁的基本单位是 next-key lock,因此会话1的加锁范围是(8, 16];但是由于是用唯一索引进行等值查询,且查询的记录存在,所以 next-key lock 退化成记录锁,因此最终加锁的范围是 id = 16 这一行。 所以,会话 2 在修改 id=16 的记录时会被锁住,而会话 3 插入 id=9 的记录可以被正常执行。