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

时间:2014-11-18 23:41:01

标签: php mysql

我有这样的查询:

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

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

2 个答案:

答案 0 :(得分:2)

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

另外,您在LIMIT 1声明中确实需要UPDATE吗?

在您的情况下,不会发生UPDATE两次因为看到WHERE条件。在第一次更新中,processing列为NULL,因此将更新为已传递的输入,但在第二次尝试中,此行的条件WHERE processing IS NULL将为false,因此将跳过{{1} }。

答案 1 :(得分:0)

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

如果您正在考虑' rows_affected'值,它会说第二次有0行受影响,除非你更改一个连接参数,告诉它返回找到的行而不是实际修改过。


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