2017-07-03 51 views
0

假设我们有一个表mytable与列id,a,b并且有一行值为(123, 'foo', 'bar')是否确保UPDATE按给定顺序执行SET赋值?

我执行此查询:

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

我期望在给定的顺序执行两个任务,因此所产生的排须(123, 'boom', 'foo'),但是这个保障?

或者是未定义的执行顺序,因此理论上可能无论是什么原因,优化程序决定以相反的顺序执行它们,最终会以(123, 'boom', 'boom')

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

+0

我会承担什么,这可能是将来会发生变化的东西,我会讨厌它会花费几秒钟来编写代码,这些代码会分配两个值并返回并在软件更新完成时停止工作。 –

回答

0

Mysql UPDATE documentation没有

单表更新的任务一般是评估由左到右。对于多表更新,不保证分配按任何特定顺序执行。

所以要在你与他人的值更新一列的情况下安全的话,我会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; 
相关问题