ホームページ >データベース >mysql チュートリアル >MySQL トリガーの「テーブルを更新できません...すでに使用されているため」エラーを解決する方法?

MySQL トリガーの「テーブルを更新できません...すでに使用されているため」エラーを解決する方法?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-27 18:51:13818ブラウズ

How to Resolve

テーブル更新中のトリガー中断: 問題の解決

データベース プログラミングでは、後でトリガーを使用してテーブルの列を更新する必要がある場合があります。同じテーブルに対する更新操作。ただし、テーブルが既に更新されているときにトリガーがテーブルを更新しようとすると、エラーが発生する可能性があります。

次のトリガーを考慮してください。

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)

更新操作が次を使用して実行される場合このトリガーでは、エラー「#1442 - ストアド関数/トリガーのテーブル 'products_score' を更新できません。これは、このストアド関数を呼び出したステートメントによってすでに使用されているためです」 function/trigger" が発生しました。

この問題を解決するには、トリガーのタイミングを AFTER ではなく BEFORE に変更します。これにより、更新操作の前にトリガーを実行できるようになり、更新中にテーブルがロックされるのを回避できます。更新されたトリガーは次のようになります。

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
;

この変更されたトリガーを使用すると、更新操作後にテーブルの列を正常に更新できます。

以上がMySQL トリガーの「テーブルを更新できません...すでに使用されているため」エラーを解決する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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