选择更新

时间:2011-07-06 08:58:00

标签: mysql innodb select-for-update

  

可能重复:
  SELECT … FOR UPDATE and MAX()

此查询中的哪些行会锁定?

select max(id) from table where id like '9%' for update

如果其他用户运行此查询会发生什么?

this是相关问题。

2 个答案:

答案 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