次のクエリでの評価の順序は何ですか:
UPDATE tbl SET q = q + 1, p = q;
つまり、または?"tbl"."p"
に設定されます。ここでの評価の順序は SQL 標準によって管理されていますか?q
q + 1
ありがとう。
アップデート
Migs の回答を検討した後、見つけたすべての DB でいくつかのテストを実行しました。標準の内容はわかりませんが、実装はさまざまです。
与えられた
CREATE TABLE tbl (p INT NOT NULL, q INT NOT NULL);
INSERT INTO tbl VALUES (1, 5); -- p := 1, q := 5
UPDATE tbl SET q = q + 1, p = q;
"p"
との値"q"
は次のとおりです。
database p q
-----------------+---+---
Firebird 2.1.3 | 6 | 6 -- But see "Update 2" below
InterBase 2009 | 5 | 6
MySQL 5.0.77 | 6 | 6 -- See "Update 3" below
Oracle XE (10g) | 5 | 6
PostgreSQL 8.4.2 | 5 | 6
SQLite 3.3.6 | 5 | 6
SQL Server 2016 | 5 | 6
更新 2
Firebird 2.5 は、私がテストした他の SQL エンジンの大部分と一致するように動作を変更し、MySQL だけを残しました。関連するリリース ノートのエントリ「SET 句のロジックの変更」は、大多数の動作が SQL 仕様に従って正しいことを強く示唆しています。
MySQL にバグを報告して、この動作についてコメントしてもらいました (バグ番号52861 )。
更新 3
前述のバグは本日 (2010-05-19) クローズされ、 UPDATEの説明と標準 SQL との相違点のセクションの両方でこの動作が明示されるようにドキュメント セットが更新されます。
ブラボー、MySQL。