UPDATE語句中SET部分列賦值的先后順序有影響么?


昨天研發同事問我個問題,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之間遷移時遇到問題,應盡可能保證代碼簡單粗暴,盡可能將一些“邏輯”拆出來,比如在由程序來計算列“最終”的更新值,即可完全避免以上困惑和踩坑。

 

=======================================

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM