我正在制作 MySql 数据库,其中我有 film 表:
- 编号
- 标题
- 数量
- 可用
- 描述
并使用外键film_id复制表:
- 编号
- 电影编号
现在我在删除触发器复制后写了:
UPDATE `film`
SET available = available - 1
WHERE OLD.film_id = id;
现在我想在删除触发器之前写在胶片上, 由于电影受到复制的限制,所以我写:
DELETE FROM copy WHERE copy.film_id = OLD.id;
这里出现错误:
Can't update table 'film' in stored function/trigger because it already used by statement which invoked this stored function/trigger.
我想删除电影 -> 删除副本 -> 更新电影(错误)
最佳答案
看起来您根本不需要trigger
。相反,您可以配置 FOREIGN KEY
,如果 film
中的父记录被删除,则 copy
表中的条目将被删除。查看 MySQL 的文档 here .您需要使用 CASCADE
选项:
CASCADE: Delete or update the row from the parent table, and automatically delete or update the matching rows in the child table. Both ON DELETE CASCADE and ON UPDATE CASCADE are supported.
这是 FOREIGN KEY
语法的样子:
CONSTRAINT fk_film_id FOREIGN KEY (film_id) REFERENCES film(id) ON DELETE CASCADE;
关于mysql - 触发逻辑导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43969365/