昨天研發同事問我個問題,UPDATE語句中SET部分列賦值的先后順序會影響結果么?以前沒考慮過這個問題,因為通常我們都會UPDATE時給列賦予一個確定的值,而不是一個依賴於其他列的值。
測試環境:
DROP TABLE TB1001; CREATE TABLE TB1001 ( ID INT PRIMARY KEY, C1 INT, C2 INT ); INSERT INTO TB1001 ( ID, C1, C2 ) SELECT 1,1,1 UNION SELECT 2,1,1;
更新語句為:
UPDATE TB1001 SET C2=CASE WHEN C1=1 THEN 11 ELSE 22 END, C1=2 WHERE ID=1; UPDATE TB1001 SET C1=2, C2=CASE WHEN C1=1 THEN 11 ELSE 22 END WHERE ID=2;
首先在SQL Server 2012上進行,更新后數據為:
在MySQL 5.6.26上運行,更新后的數據為:
測試結論:
在SQL Server 2012中,UPDATE 語句SET部分列順序不會影響最終結果;
在MySQL 5.6版本中,UPDATE 語句SET部分列順序會影響最終結果;
因此建議研發同志,為提高程序的“兼容性”,避免在MySQL和SQL Server之間遷移時遇到問題,應盡可能保證代碼簡單粗暴,盡可能將一些“邏輯”拆出來,比如在由程序來計算列“最終”的更新值,即可完全避免以上困惑和踩坑。
=======================================