ユーザー変数を含む式の評価順序が SQL で定義されていないのはなぜですか?
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;
このクエリでは、ユーザー変数 @a に割り当てられた値が後続の値の生成に使用されます。ただし、@a を含む式が評価される順序は異なる可能性があり、クエリが実行されるたびに異なる結果が得られます。
この評価順序のあいまいさは、SQL 標準で操作の順序が指定されていないために発生します。ユーザー変数を含む式の場合。その結果、データベース管理システム (DBMS) は独自の評価戦略を自由に実装でき、通常はこの決定をクエリ オプティマイザーに委任します。
オプティマイザーは、必要性などのパフォーマンス上の考慮事項に基づいて式の評価の優先順位を決定する場合があります。中間結果または並列実行の可能性について。この柔軟性により、DBMS は各クエリの特定の特性に基づいてクエリ実行を最適化できます。
ただし、評価順序が定義されていないと、クエリ内で更新されるユーザー変数が式に含まれる場合に不整合が生じる可能性があります。上の例で見られるように、このような変数の値は予期しない順序で変更され、誤った結果が生じる可能性があります。
一貫した結果を保証するには、一時変数または一時変数を使用して評価の順序を明示的に制御することをお勧めします。サブクエリ。ユーザー変数の評価を依存する式から分離することで、目的の操作シーケンスを保証し、潜在的な曖昧さを回避できます。
以上がユーザー変数を使用した SQL 式の評価順序が未定義なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。