我正在制作MySql数据库,我有电影表:
和复制表:
现在我已经在删除触发器复制:
之后写了UPDATE `film`
SET available = available - 1
WHERE OLD.film_id = id;
现在我想在电影上删除触发器之前写一下, 由于电影是由副本限制的,所以我写道:
DELETE FROM copy WHERE copy.film_id = OLD.id;
发生以下错误:
无法更新表格'电影'在存储函数/触发器中,因为它 已经被调用此存储函数/触发器的语句使用。
我想删除电影 - >删除副本 - >更新电影(错误)
答案 0 :(得分:2)
看起来你根本不需要trigger
。相反,您可以配置FOREIGN KEY
,如果copy
中的父记录被删除,film
表中的条目将被删除。看看MySQL的文档here。您需要使用CASCADE
选项:
CASCADE:从父表中删除或更新行,然后 自动删除或更新子表中的匹配行。 支持ON DELETE CASCADE和ON UPDATE CASCADE。
这就是FOREIGN KEY
语法的样子:
CONSTRAINT fk_film_id FOREIGN KEY (film_id) REFERENCES film(id) ON DELETE CASCADE;