ホームページ >データベース >mysql チュートリアル >MySQL で「DETERMINISTIC、NO SQL、または READS SQL DATA」エラーが発生するのはなぜですか?

MySQL で「DETERMINISTIC、NO SQL、または READS SQL DATA」エラーが発生するのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-31 16:16:02851ブラウズ

Why Do I Get the

エラーの理解: "DETERMINISTIC、NO SQL、または READS SQL DATA" 宣言要件

データベースを MySQL にインポートするときに、次のことが考えられます。次のエラーが発生します:

1418 (HY000) at line 10185: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)

このエラーは、定義された関数またはストアド プロシージャの定義に次の宣言のいずれかが欠落していることを示します:

  • DETERMINISTIC
  • NO SQL
  • READS SQL DATA

MySQL でバイナリ ロギングが有効になっている場合、データの整合性とレプリケーションの一貫性を確保するためにこれらの宣言が必要です。

エラーの修正

この問題を解決するには、次の 2 つの方法のいずれかを利用できます:

  1. log_bin_trust_function_creators 変数を有効にする:

    • MySQL コンソールで、次のコマンドを実行します。

      SET GLOBAL log_bin_trust_function_creators = 1;
    • または、次の内容を MySQL 構成ファイル (例: mysql) に追加します。 .ini):

      log_bin_trust_function_creators = 1;

    この設定を有効にすると、バイナリ ロギング中に明示的な宣言のない関数を実行できます。

  2. 追加関数またはプロシージャへの適切な宣言:

    • 同じ入力パラメータに対して常に同じ出力を生成する関数の場合は、DETERMINISTIC 宣言を使用します。例:

      CREATE FUNCTION my_function() DETERMINISTIC
      BODY
       -- Your function logic
      END
    • SQL ステートメントを含まない関数の場合は、NO SQL 宣言を使用します。

      CREATE FUNCTION my_function() NO SQL
      BODY
       -- Your function logic
      END
    • Forデータベースからデータを読み取るだけの関数の場合は、READS SQL DATA 宣言を使用します。

      CREATE FUNCTION my_function() READS SQL DATA
      BODY
       -- Your function logic
      END

決定論的な関数宣言について

非決定的関数はデータを変更したり、予測不可能な入力を使用したりする可能性があり、同じ入力パラメーターでも異なる結果が生じる可能性があります。したがって、パフォーマンスを最適化し、データの整合性を確保するには、関数の動作を正確に宣言することが重要です。

MySQL ドキュメントには、さまざまな関数およびストアド プロシージャ関数の宣言オプションに関する包括的なガイドが用意されており、それぞれについて情報に基づいた意思決定を行うことができます。関数。誤った宣言は実行計画に影響を与え、パフォーマンスに影響を与える可能性があります。

以上がMySQL で「DETERMINISTIC、NO SQL、または READS SQL DATA」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。