SQL UPDATE 求值順序
在 SQL UPDATE 語句中,表達式的求值順序會對結果產生顯著影響。讓我們檢查以下查詢:
UPDATE tbl SET q = q + 1, p = q;
這裡出現了問題:「tbl」.「p」會被設定為 q 或 q 1 嗎?評估順序是否受 SQL 標準管轄?
實作各不相同
儘管 SQL 標準缺乏明確性,但不同的資料庫實作以不同方式處理評估順序。測試顯示 Firebird、InterBase、MySQL、Oracle、PostgreSQL、SQLite 和 SQL Server 之間有不同的行為。大多數情況下,「p」的值設定為 q 1,表示從左到右評估。
標準解釋
但是, SQL92 規範建議標準旨在在更新任何行之前評估表達式。這將導致“p”被設定為 q。
MySQL 的獨特方法
MySQL 脫穎而出,成為唯一經過測試的資料庫,能夠在評估。此行為與大多數其他實現不同,可能會導致意外結果。
結論
雖然 SQL 標準缺乏對計算順序的明確指導,但通常假設在應用更新之前應該評估表達式。然而,實現各不相同,開發人員應該意識到潛在的差異。在評估順序至關重要的情況下,建議使用中間變數來明確定義所需的操作順序。
以上是SQL 更新:「p = q」是否反映原始或更新的「q」值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!