ホームページ >データベース >mysql チュートリアル >手動実行が成功した後、MySQL トリガーが PTS 列の更新に失敗するのはなぜですか?
ゲーム統計の 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 サイトの他の関連記事を参照してください。