ホームページ > データベース > mysql チュートリアル > After Update トリガーを使用する際の「ストアド関数/トリガーのテーブルを更新できません」エラーを防ぐにはどうすればよいですか?

After Update トリガーを使用する際の「ストアド関数/トリガーのテーブルを更新できません」エラーを防ぐにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-26 22:28:14
オリジナル
702 人が閲覧しました

How Can I Prevent

同じテーブル更新後のトリガー更新

データベース システムでは、テーブル内で特定のイベントが発生したときに、トリガーを使用して特定のアクションを自動的に実行します。テーブルの更新後にトリガー内から同じテーブルを更新しようとすると、一般的な問題が 1 つ発生します。

次のトリガーについて考えてみましょう。

CREATE TRIGGER upd_total_votes AFTER UPDATE ON products_score
FOR EACH ROW
    UPDATE
        products_score 
    SET
        products_score.votes_total =
            (SELECT
                 (votes_1 + votes_2 + votes_3 + votes_4 + votes_5)
             FROM
                 products_score
             WHERE
                 id = new.id);
ログイン後にコピー

次のようにテーブルを更新しようとする場合:

UPDATE products_score SET votes_1 = 5 WHERE id = 0;
ログイン後にコピー

トリガーは次のエラーで失敗します:

#1442 - Can't update table 'products_score' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
ログイン後にコピー

解決するにはこの場合、トリガーは、更新イベントの後ではなく、前に実行されるように変更する必要があります。これにより、元の更新ステートメントが適用される前にトリガーでテーブルを更新できるようになります。

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;
ログイン後にコピー

この変更により、以前と同様にテーブルを更新すると、votes_total 列の更新が正常にトリガーされます。

以上がAfter Update トリガーを使用する際の「ストアド関数/トリガーのテーブルを更新できません」エラーを防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート