ホームページ >データベース >mysql チュートリアル >トリガー内でテーブルを更新するとエラー #1442 が発生するのはなぜですか?これはどのように解決できますか?
トリガーの落とし穴: トリガーによって参照されるテーブルの更新
トリガー内で同じテーブルを更新すると、問題が発生する可能性があります。このようなインスタンスの 1 つは、更新後に実行されるトリガーを使用して products_score テーブルを更新しようとする場合です。
提供されたコードに示すように、トリガーは、次の値に基づいて votes_total 列を計算して更新しようとします。同じ products_score テーブル内の他の列 (votes_1、votes_2、...、votes_5) の値。ただし、この更新がトリガーされると、エラーが発生します:
#1442 - Can't update table 'products_score' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
解決策: BEFORE トリガーの使用
この問題を解決するには、トリガーを次のように変更する必要があります。行の更新後ではなく、前に実行します。更新前に実行すると、トリガーは votes_total 列に割り当てられている新しい値にアクセスして変更できます。
BEFORE update 句を使用して変更されたトリガーは次のとおりです。
CREATE TRIGGER upd_total_votes BEFORE UPDATE ON products_score FOR EACH ROW BEGIN SET new.votes_total = new.votes_1 + new.votes_2 + new.votes_3 + new.votes_4 + new.votes_5; END;
Withこの変更により、トリガーは実際の行更新が行われる前に votes_total 列を正常に計算して更新し、エラーを解決して必要な機能を使用できるようにします。
以上がトリガー内でテーブルを更新するとエラー #1442 が発生するのはなぜですか?これはどのように解決できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。