私は MySQL データベースに取り組んでおり、トリガーを作成する際に問題に直面しています。データベースに、1 対多の関係を持つ "user" と "book" の 2 つのテーブルがあり、user_id が "book" テーブルの外部キーであるとします。本が削除されたときに「user」テーブルの「book_count」列を 1 減らすトリガーを作成しました。
CREATE TRIGGER `after_book_delete` AFTER DELETE ON `book`
FOR EACH ROW BEGIN
UPDATE `user` SET `user`.book_count = `user`.book_count - 1 WHERE `user`.user_id = OLD.user_id;
END;
ユーザーが削除されたときに、ユーザーのすべての本を削除したいと思います。私はこれを試しました:
CREATE TRIGGER `before_user_delete` BEFORE DELETE ON `user`
FOR EACH ROW BEGIN
DELETE FROM `book` WHERE user_id = OLD.user_id;
END;
これにより、次のエラーが返されます。
#1442 - Can't update table 'user' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
エラーは、削除しようとしているユーザー テーブルの行を更新しようとする最初のトリガーに対するものであることがわかります。トリガーで実行したい場合の回避策はありますか?