ホームページ >データベース >mysql チュートリアル >手動実行が成功した後、MySQL トリガーが PTS 列の更新に失敗するのはなぜですか?

手動実行が成功した後、MySQL トリガーが PTS 列の更新に失敗するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-06 07:05:02840ブラウズ

Why Is My MySQL Trigger Failing to Update the PTS Column After Manual Execution Succeeds?

ゲーム統計の PTS を更新するための機能しない MySQL トリガーのトラブルシューティング

次の問題を考えてみましょう。クエリの手動実行は成功したにもかかわらず、変更されたplayed_games値に基づいてPTS列を自動的に更新することを目的としたトリガーが機能していません。トリガーの構文は単純です:

<code class="sql">CREATE TRIGGER `upd_PTS` AFTER UPDATE ON `pos_table`
FOR EACH ROW BEGIN
    IF (NEW.played_games <> OLD.played_games)
    THEN  
        update pos_table set PTS=((NEW.won_games*2)+(NEW.tie_games*1));
    END IF;
END</code>

しかし、さらに調査すると、played_games を手動で変更しようとすると、「これを呼び出したステートメントによってすでに使用されているため、ストアド関数/トリガーのテーブル pos_table を更新できません」というエラーが判明しました。ストアド関数/トリガー。"

説明:

このエラーは、ストアド関数とトリガーによって課される制約に起因します。呼び出し元のステートメントが既に読み取りまたは書き込みを行っているテーブルを変更することは禁止されています。

解決策:

変更する場合は、挿入操作でトリガーされるトリガーの場合挿入される値を変更するには、BEFORE INSERT トリガーを使用して NEW 値を調整します。

さらに、トリガーに記述された更新ステートメント

<code class="sql">update pos_table set PTS=((NEW.won_games*2)+(NEW.tie_games*1));</code>

にも欠陥があります。単一の行ではなくテーブル全体を更新します。このシナリオでは、専用の列を用意するよりも、表示時に PTS を計算する方が効率的です。これにより、トリガーの必要性がなくなり、トリガー関連の問題が解決されます。

以上が手動実行が成功した後、MySQL トリガーが PTS 列の更新に失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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