触发逻辑会导致错误

时间:2017-05-14 22:21:15

标签: mysql sql database triggers logic

我正在制作MySql数据库,我有电影表:

  • ID
  • 标题
  • 金额
  • 可用
  • 描述
带有外键 film_id

复制表:

  • ID
  • film_id

现在我已经在删除触发器复制

之后写了
UPDATE `film`
            SET available = available - 1
WHERE OLD.film_id = id;

现在我想在电影上删除触发器之前写一下, 由于电影是由副本限制的,所以我写道:

DELETE FROM copy WHERE copy.film_id = OLD.id;

发生以下错误:

  

无法更新表格'电影'在存储函数/触发器中,因为它   已经被调用此存储函数/触发器的语句使用。

我想删除电影 - >删除副本 - >更新电影(错误)

1 个答案:

答案 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;