ホームページ > データベース > mysql チュートリアル > バイナリ ロギングが有効になっている場合、MySQL が決定論的関数に関するエラーをスローするのはなぜですか?

バイナリ ロギングが有効になっている場合、MySQL が決定論的関数に関するエラーをスローするのはなぜですか?

Mary-Kate Olsen
リリース: 2024-10-31 15:31:02
オリジナル
680 人が閲覧しました

Why Does MySQL Throw an Error About Deterministic Functions When Binary Logging is Enabled?

MySQL エラー: 「この関数の宣言には DETERMINISTIC、NO SQL、または READS SQL DATA が含まれておらず、バイナリ ログが有効になっています。」

データベースを MySQL にインポートしようとすると、関数の宣言に DETERMINISTIC、NO SQL、または READS SQL DATA のいずれかの宣言が欠落していることを示すエラーが発生する場合があります。このエラーは、バイナリ ログがアクティブ化されている場合に発生します。

エラーの解決:

このエラーは 2 つの方法で対処できます:

  1. MySQL コンソールの構成: MySQL コンソールで次のコマンドを実行します:

    SET GLOBAL log_bin_trust_function_creators = 1;
    ログイン後にコピー
  2. 構成ファイルの編集: 次の行を追加しますmysql.ini 設定ファイルへの追加:

    log_bin_trust_function_creators = 1;
    ログイン後にコピー

これらの変更により、非決定的関数をバイナリ ロギングで使用できるようになります。ただし、バイナリ ログが無効になっている場合、これらの設定はエラーに影響しません。

関数宣言について:

  • DETERMINISTIC: を示します。関数は同じ入力パラメータに対して常に同じ結果を生成することを示します。
  • NOT DETERMINISTIC: その逆、同じ入力パラメータに対して関数の結果が変化する可能性があることを示します。
  • READS SQL DATA: 関数がデータベースからのみデータを読み取ることを明示的に指定します。
  • NO SQL: 関数に SQL ステートメントが含まれていないことを示します。
  • CONTAINS SQL: 関数には SQL 命令が含まれていますが、データは変更されないことを示します。

関数には非決定的な命令が含まれていることに注意することが重要です。 NOW() や UUID() などは NOT DETERMINISTIC として宣言する必要があります。さらに、複製されていないスキーマからデータを読み取る関数も非決定的です。

ベスト プラクティス:

理想的なアプローチは、ストアド関数の決定的宣言を理解して利用することです。これらはレプリケーションの最適化に役立つためです。 MySQL では、潜在的なエラーを回避するために、ストアド関数の定義で前述の宣言のいずれかを明示的に指定することをお勧めします。

以上がバイナリ ロギングが有効になっている場合、MySQL が決定論的関数に関するエラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート