SQL でのユーザー変数を含む式の評価順序が決定されていない
MySQL ドキュメントには、ユーザー変数を含む式の評価順序が決定的ではないことが示されています。 。次のクエリを考えてみましょう:
SET @a := 0; SELECT @a AS first, @a := @a + 1 AS second, @a := @a + 1 AS third, @a := @a + 1 AS fourth, @a := @a + 1 AS fifth, @a := @a + 1 AS sixth;
期待される出力は、増加する整数のシーケンスです:
first second third fourth fifth sixth 0 1 2 3 4 5
ただし、ドキュメントに記載されているように、ユーザー変数の評価順序は未定義です。 。これは、異なるデータベース実装、または同じクエリの異なる実行によっても異なる結果が生成される可能性があることを意味します。
この未定義の評価順序の背後にある理由は、SQL 標準によって提供される柔軟性にあります。この標準では式をどのように評価するかについては規定されていないため、この決定は個々のデータベース システムに委ねられています。その結果、各データベース オプティマイザーは、評価順序を含め、式を評価するための独自のアプローチを選択できます。
この標準の評価順序の欠如は、後続の計算で特定の変数値に依存する場合、または複数の結果を比較する場合に影響を与える可能性があります。異なるデータベースインスタンス。一貫性を確保し、予測できない動作を回避するには、複雑な式でのユーザー変数の使用を最小限に抑え、必要に応じてその評価順序を明示的に定義することがベスト プラクティスです。
以上がSQLのユーザー変数を含む式の評価順序が決まっていないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。