答案 0 :(得分:3)
如果您没有id的索引,这将锁定所有记录。但我猜你有这样的指数。所以这将锁定所有匹配的记录,包括其间的一些记录(如果你锁定3和5,4也被锁定)
SELECT ... FOR UPDATE读取最新的可用数据,在其读取的每一行上设置独占锁。因此,它设置搜索的SQL UPDATE将在行上设置的相同锁。
修改强> 在SELECT max(id)FROM ...的情况下,您不需要从表中读取任何行,因为可以从索引中获取此信息。如果要准确锁定一行,正确的查询将是SELECT * FROM table WHERE id = SELECT max(id)FROM table
答案 1 :(得分:2)
我会做出有根据的猜测,这取决于transaction isolation level。