我正在研究 MySQL 数据库并面临创建触发器的问题。在数据库中,假设有两个表,“user”和“book”,一对多的关系,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.
我可以理解该错误是针对第一个触发器,它尝试更新用户表中即将删除的行。那么,如果我想通过触发器来做到这一点,有什么解决方法吗?