UPDATE是否保证按给定顺序执行SET赋值?

时间:2017-07-03 15:30:37

标签: mysql

假设我们有一个包含mytableida列的表b,并且有一行值为(123, 'foo', 'bar')

我执行此查询:

UPDATE mytable SET b=a, a='boom' WHERE id=123

我希望这两个作业按给定顺序执行,因此结果行为(123, 'boom', 'foo'),但是否可以保证?

或者执行的顺序是未定义的,因此从理论上讲,优化器无论出于何种原因决定以相反的顺序执行它们,最终会以(123, 'boom', 'boom')结束?

MySQL文档没有明确说明分配按照它们在查询中出现的顺序执行。

1 个答案:

答案 0 :(得分:0)

Mysql UPDATE documentation

  

单表UPDATE分配通常从左到右进行评估。对于多表更新,无法保证以任何特定顺序执行分配。

为了安全起见,如果您使用另一个列更新一列,我会将UPDATE语句拆分为单独的查询:

-- do all the fixed value updates here
UPDATE mytable SET a='boom', x='whatever' WHERE id=123; 
-- do "relational" updates here, after the values have been updated
UPDATE mytable SET b=a                    WHERE id=123;