如果MySQL同时获得相同的UPDATE查询会发生什么


What happens if MySQL gets same UPDATE query at the same time?

我有一个这样的查询:

UPDATE persons SET processing = :processing WHERE processing IS NULL LIMIT 1

如果在执行此查询的确切时间调用脚本两次,该怎么办?它有可能只更新同一行两次吗

> AFAIK,UPDATE在表/行上持有独占锁,因此当一个UPDATE在进程中时,另一个将被排队。为了提高安全性并强制实施此行为,您必须考虑在 Transaction Block 内运行 DML 操作。

另外,你真的需要在UPDATE声明中加入这个LIMIT 1吗?

在您的情况下,没有UPDATE不会发生两次,因为请参阅WHERE条件。在第一次更新中,processing列为 NULL,因此将更新为传递的输入,但在第二次尝试中,将为此行false条件WHERE processing IS NULL,因此将跳过UPDATE

它将以原子方式执行两次。如果processing更改为 not null,则队列中的第二个操作将不执行任何操作。

如果您正在考虑"rows_affected"值,它会说第二次受影响的 0 行,也就是说,除非您更改连接参数,告诉它返回找到的任何行而不是实际修改。


重新解释您的问题,如果您有一个包含多个processing条目的表,其中多个为 NULL,那么不,它不会更新相同的条目将设置其中两个。