エラーの理解: "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
データベースからデータを読み取るだけの関数の場合は、READS SQL DATA 宣言を使用します。
CREATE FUNCTION my_function() READS SQL DATA BODY -- Your function logic END
決定的関数の宣言を理解する
非決定的関数はデータを変更したり、予測できない入力を使用したりする可能性があり、異なる結果が生じる可能性があります。同じ入力パラメータの結果。そのため、パフォーマンスを最適化し、データの整合性を確保するには、関数の動作を正確に宣言することが重要です。
MySQL ドキュメントには、さまざまな関数およびストアド プロシージャ関数の宣言オプションに関する包括的なガイドが用意されており、それぞれについて情報に基づいた意思決定を行うことができます。関数。誤った宣言は実行計画に影響を与え、パフォーマンスに影響を与える可能性があります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3