Bil*_*win 10
在这种情况下,键表示索引中的一个条目。所以可以说,“一个键被锁定”,这意味着某个会话对索引中的一个条目持有锁。
通过索引搜索或扫描获取 next-key 锁。
UPDATE mytable WHERE id > 18;
Run Code Online (Sandbox Code Playgroud)
假设索引 10、11、13 和 20 中实际上有值(如该手册中的示例)。上面显示的 UPDATE 将锁定 20 的条目,以及 20 之前的间隙,因为它是索引扫描。
然后您的会话尝试插入间隙:
INSERT INTO mytable (id) VALUES (19);
Run Code Online (Sandbox Code Playgroud)
这与 next-key lock 的 gap-lock 部分冲突。
可以这样想:你不能在 19 上获得锁,因为其他一些会话已经锁定了包含你想要插入的值 19 以及 20 的间隙,这是19 之后真正存在的下一个键在索引中。