MYSQL锁定文档告诉我一份声明
SELECT * FROM child WHERE id = 100;如果id是非唯一行或非索引行,则会导致进程间隙锁定。但是,这是一致的非锁定select语句的语法。我认为这些语句使用了自己的快照,避免了锁定。上述间隙锁定是否仅适用于查询时?我哪里出问题了?
发布于 2018-01-02 19:47:55
正确的理解是,非锁定选择不会创建锁,也不会创建任何间隙锁。
这个例子是错误的,或者充其量是不清楚的。
锁定选择包括LOCK IN SHARE MODE (创建S锁)或FOR UPDATE (创建X锁)。因为有两个可能的锁定子句,也许作者打算写一些东西来说明其中一个会导致间隙锁,但是他们忘记写了。
在Gap一节的开头,文本确实使用了一个示例语句SELECT c1 FROM t WHERE c1 BETWEEN 10 and 20 FOR UPDATE;,这是一个更清楚的锁定选择示例。
https://stackoverflow.com/questions/48066533
复制相似问题