关于与其文档相关的MySQL锁的困惑

问题描述 投票:2回答:1

MYSQL locking docs告诉我一个声明

SELECT * FROM child WHERE id = 100;

如果id是非唯一或非索引行,则会导致进行间隙锁定。但是,这是一致的非锁定select语句的语法。我认为这些语句使用了自己的快照并避免了锁定。前面的间隙锁定仅适用于查询时间吗?我哪里错了?

mysql sql locks
1个回答
2
投票

您理解正确,非锁定SELECT不会创建锁定,也不会创建任何间隙锁定。

这个例子是错误的,或者至多不清楚。

锁定SELECT包括LOCK IN SHARE MODE(用于创建S锁)或FOR UPDATE(用于创建X锁)。因为有两个可能的锁定子句,也许作者打算写一些东西说任何一个会导致间隙锁,但后来他们忘了写那个。

在Gap Locks部分的开头,文本确实使用了一个示例语句SELECT c1 FROM t WHERE c1 BETWEEN 10 and 20 FOR UPDATE;,这更明显是一个锁定SELECT的例子。

© www.soinside.com 2019 - 2024. All rights reserved.