【发布时间】:2015-04-08 10:17:53
【问题描述】:
我正在研究 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.
我可以理解错误是针对第一个触发器,它尝试更新用户表中即将删除的行。那么如果我想通过触发器来做,有什么解决方法吗?
【问题讨论】:
-
首先你通过使用查询 SHOW TRIGGERS LIKE 'before_user_delete%' 来检查它是否已经存在
-
不,它不存在。