据我了解(基于official docs),Next-Key锁是索引记录锁+间隔锁,位于该索引记录之前(间隔之前)。
所以我很好奇为什么叫NEXT-Key锁? “键”在这里是什么意思,为什么要“下一个”?
答案 0 :(得分:1)
在这种情况下, key 表示索引中的一个条目。因此,可以说“键已锁定”,这意味着某个会话会锁定索引中的条目。
通过索引搜索或扫描获得下一键锁定。
UPDATE mytable WHERE id > 18;
假设索引10、11、13和20中实际上有值(如该手册中的示例)。上面显示的UPDATE会将条目锁定为20,而将间隙锁定为20,因为它是索引扫描。
然后您的会话尝试插入空白:
INSERT INTO mytable (id) VALUES (19);
这与下一键锁定的间隙锁定部分冲突。
这样想:您无法锁定19,因为其他某个会话已经锁定了包括要插入的值19和下一个下一个值20的间隙。确实存在于索引中的键。