ホームページ >データベース >mysql チュートリアル >MySQL トリガーの「テーブルを更新できません...すでに使用されているため」エラーを解決する方法?
テーブル更新中のトリガー中断: 問題の解決
データベース プログラミングでは、後でトリガーを使用してテーブルの列を更新する必要がある場合があります。同じテーブルに対する更新操作。ただし、テーブルが既に更新されているときにトリガーがテーブルを更新しようとすると、エラーが発生する可能性があります。
次のトリガーを考慮してください。
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 サイトの他の関連記事を参照してください。