ホームページ  >  記事  >  データベース  >  MySQL トリガーが機能しないのはなぜですか: 構文エラーですか、それともストアド関数/トリガーの制限ですか?

MySQL トリガーが機能しないのはなぜですか: 構文エラーですか、それともストアド関数/トリガーの制限ですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-06 15:18:03752ブラウズ

Why is my MySQL Trigger not working: Is it a Syntax Error or a Stored Function/Trigger Restriction?

非効率な MySQL トリガーのデバッグ: ストアドファンクション/トリガーの制限について

応答しない MySQL トリガーに遭遇すると、特にクエリが手動で実行されたときに問題なく動作する場合にイライラすることがあります。このようなシナリオでは、多くの場合、問題はトリガーの構文内、またはストアド関数やトリガーによって課せられる制限内にあります。

トリガー構文エラー

提供されたトリガー構文は単純で、予期されたパターンに従っているようです。ただし、括弧とセミコロンの配置を再確認し、それらが正しく配置され、構文エラーが発生していないことを確認することが重要です。

ストアド関数/トリガーの制限

重要な制限の 1 つストアド関数とトリガーを使用する場合は、呼び出し元のステートメントで現在使用されているテーブルを変更できないことに注意してください。この制限はドキュメントで明確に説明されています。

<code class="text">"A stored function or trigger cannot modify a table that is already being used (for reading or writing) by the statement that invoked the function or trigger."</code>

提供されたトリガーでは、ステートメント update pos_table set PTS=((NEW.won_games*2) (NEW.tie_games*1));トリガーによって変更されているのと同じテーブル (pos_table) を更新しようとします (pos_table の UPDATE でトリガーされるため)。前述の制限に違反すると、played_games 列を手動で編集するときにエラーが発生します。

代替アプローチ

ストアド関数/トリガーの制限によって課せられる制限を回避するには、次の使用を検討することをお勧めします。挿入中に値を変更する場合は、BEFORE INSERT などの別のトリガー タイプを使用します。ただし、この特定のケースでは、値を表示するときに PTS の計算を直接実行できるため、トリガーや関数を保存する必要がありません。このアプローチにより、コードが簡素化され、ストアドファンクション/トリガーの制限との潜在的な競合が回避されます。

以上がMySQL トリガーが機能しないのはなぜですか: 構文エラーですか、それともストアド関数/トリガーの制限ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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