【发布时间】:2011-09-29 10:45:14
【问题描述】:
【问题讨论】:
-
这是我的问题。阅读我的问题的最后一行
-
是的,我知道。我是从你问题的最后一行找到的。而且我仍然认为你不应该提出多个问同一件事的问题。
标签: mysql innodb select-for-update
【问题讨论】:
标签: mysql innodb select-for-update
我会做出一个有根据的猜测,这取决于transaction isolation level。
【讨论】:
如果您在 id 上没有索引,这将锁定所有记录。但我猜你有这样的索引。所以这将锁定所有匹配的记录,包括介于两者之间的一些记录(如果您锁定 3 和 5,则 4 也被锁定)
SELECT ... FOR UPDATE 读取最新的可用数据,在它读取的每一行上设置排他锁。因此,它设置的锁与搜索的 SQL UPDATE 在行上设置的锁相同。
编辑 在 SELECT max(id) FROM ... 的情况下,您不需要从表中读取任何行,因为可以从索引中获取此信息。如果你想锁定一行,正确的查询是 SELECT * FROM table WHERE id = SELECT max(id) FROM table
【讨论】: