ホームページ >データベース >mysql チュートリアル >MySQL で「DETERMINISTIC、NO SQL、または READS SQL DATA」エラーが発生するのはなぜですか?
エラーの理解: "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)
このエラーは、定義された関数またはストアド プロシージャの定義に次の宣言のいずれかが欠落していることを示します:
MySQL でバイナリ ロギングが有効になっている場合、データの整合性とレプリケーションの一貫性を確保するためにこれらの宣言が必要です。
エラーの修正
この問題を解決するには、次の 2 つの方法のいずれかを利用できます:
log_bin_trust_function_creators 変数を有効にする:
MySQL コンソールで、次のコマンドを実行します。
SET GLOBAL log_bin_trust_function_creators = 1;
または、次の内容を MySQL 構成ファイル (例: mysql) に追加します。 .ini):
log_bin_trust_function_creators = 1;
この設定を有効にすると、バイナリ ロギング中に明示的な宣言のない関数を実行できます。
追加関数またはプロシージャへの適切な宣言:
同じ入力パラメータに対して常に同じ出力を生成する関数の場合は、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 サイトの他の関連記事を参照してください。