关于mysql锁与文档相关的混淆

a5g8bdjr  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(361)

你告诉我

SELECT * FROM child WHERE id = 100;

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

kuuvgm7e

kuuvgm7e1#

正确地理解,非锁定选择不会创建锁,也不会创建任何间隙锁。
这个例子是错误的,或者充其量是不清楚的。
锁定选择包括 LOCK IN SHARE MODE (创建s锁)或 FOR UPDATE (创建x锁)。因为有两个可能的锁子句,也许作者打算写一些东西,说其中任何一个都会导致间隙锁,但后来他们忘了写那个。
在关于间隙锁的部分的开头,文本确实使用了一个示例语句 SELECT c1 FROM t WHERE c1 BETWEEN 10 and 20 FOR UPDATE; 更清楚地说,这是一个锁定选择的例子。

相关问题