为什么 Next-Key lock 这么叫呢?

Why Next-Key lock is called this way?

据我了解(基于official docs),Next-Key锁是一个索引记录锁+该索引记录之前的间隙锁(前一个间隙)。

所以我很好奇为什么叫NEXT-Key lock? 'key' 在这里是什么意思,为什么 'next'?

在此上下文中,key 表示索引中的一个条目。所以可以说,"a key is locked" 这意味着某个会话持有索引中条目的锁。

next-key 锁通过索引搜索或扫描获取。

UPDATE mytable WHERE id > 18;

假设索引 10、11、13 和 20 中实际存在值(如该手册中的示例)。上面显示的 UPDATE 将锁定条目 20,以及 20 之前的间隙,因为它是索引扫描。

然后你的会话尝试插入到间隙中:

INSERT INTO mytable (id) VALUES (19);

这与 next-key 锁的 gap-lock 部分冲突。

这样想:您无法锁定 19,因为其他会话已经锁定了包含您要插入的值 19 以及 20,即 [=25] 的间隙=]真正存在于索引中的 19 之后的下一个键。