ホームページ >データベース >mysql チュートリアル >トリガー内でテーブルを更新するとエラー #1442 が発生するのはなぜですか?これはどのように解決できますか?

トリガー内でテーブルを更新するとエラー #1442 が発生するのはなぜですか?これはどのように解決できますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-23 03:03:33219ブラウズ

Why Does Updating a Table Inside a Trigger Cause Error #1442, and How Can This Be Solved?

トリガーの落とし穴: トリガーによって参照されるテーブルの更新

トリガー内で同じテーブルを更新すると、問題が発生する可能性があります。このようなインスタンスの 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 サイトの他の関連記事を参照してください。

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