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 UPDATE: `p = q` は元の値または更新された `q` 値を反映しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。