2017-01-30 26 views
1

在某些情況下,我必須將值從一列複製到另一列,並將第一列的值設置爲NULL。此SQL語句按預期工作:將值從一列複製到另一列並設置爲NULL - MySQL

UPDATE lessons SET order_id_old = order_id, order_id = NULL WHERE id = 1 

但我不確定這是否是正確的方式。或者我應該更好地使用2個查詢來達到這個目的?

UPDATE lessons SET order_id_old = order_id WHERE id = 1; 
UPDATE lessons SET order_id = NULL WHERE id = 1; 
+1

這是正確的方法。如果您不確定,請將其複製到臨時表中並先進行測試。 – Ibu

+1

如果你用2個語句來完成,你應該使用一個事務來確保原子性。 – Barmar

回答

2

我肯定會用第二種方法。這裏的documentation說什麼:

單表更新的任務一般是評估從左向右 。對於多表更新,並不保證 指定按任何特定順序執行。

就你的情況而言,目前沒有問題,因爲只有一張表。但是,將來如果有人修改了此聲明並添加了新的table/join(假設它會像一個table一樣正常工作),它將停止工作/給出不一致的結果。

因此,爲了可讀性/可維護性目的,請繼續第二種方法。 (另外,我建議將update陳述打包成transaction以保留atomicity

1

documentation

如果從訪問表的列在一個表達式進行更新,UPDATE使用列的當前值。例如,下面的語句設置比其當前值col1多了一個:

UPDATE t1 SET col1 = col1 + 1; 

下面的語句中的第二個分配集合col2當前(已更新)col1價值,而不是原來的col1值。結果是col1col2具有相同的值。此行爲不同於標準SQL。

UPDATE t1 SET col1 = col1 + 1, col2 = col1; 

單表UPDATE分配通常從左到右進行評估。對於多表更新,不保證分配按任何特定順序執行。

就你而言,使用單個語句應該沒問題。

相關問題