ホームページ >データベース >mysql チュートリアル >MySQL 関数が確定的宣言に関して「1418 (HY000)」エラーをスローするのはなぜですか?

MySQL 関数が確定的宣言に関して「1418 (HY000)」エラーをスローするのはなぜですか?

DDD
DDDオリジナル
2024-11-02 12:22:30254ブラウズ

Why Does My MySQL Function Throw a

バイナリ ロギングが有効になっている関数宣言での 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)

問題の解決

次の 2 つがあります。これを解決するメソッド:

  1. MySQL コンソールで次のコマンドを実行します。
SET GLOBAL log_bin_trust_function_creators = 1;
  1. mysql.ini 設定ファイルに次のコマンドを追加します。
log_bin_trust_function_creators = 1;

これにより、データを変更する関数である非決定的関数のチェックが緩和されます。

決定的宣言について

決定的関数非決定的関数は同じ入力パラメーターに対して常に同じ結果を生成しますが、そうではありません。 MySQL は、レプリケーションの最適化中にこれらの宣言を使用します。

決定的宣言のタイプ

いくつかのタイプの決定的宣言が使用できます。

  • DETERMINISTIC: 関数が決定的であることを宣言します。
  • NOT DETERMINISTIC: 関数が非決定的であると宣言します。
  • READS SQL DATA: 関数がデータベースからデータのみを読み取ることを宣言します。
  • NO SQL: 関数に SQL ステートメントが含まれないことを宣言します。
  • CONTAINS SQL: 関数に SQL 命令が含まれていることを宣言しますが、データの読み取りや書き込みは行いません。

ベスト プラクティス

ストアド関数には決定論的な宣言を適切に指定することをお勧めします。最適なレプリケーションとデータの整合性を保証する機能。関数の性質を慎重に検討し、適切な宣言を使用することで、エラーを防止し、データベースのパフォーマンスを最適化できます。

以上がMySQL 関数が確定的宣言に関して「1418 (HY000)」エラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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