2017-07-03 120 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; 
相關問題