mysql - 触发逻辑导致错误

标签 mysql sql database triggers logic

我正在制作 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/

相关文章:

sql - MSSQL 和 TSQL 有什么区别?

php - SQL - 如何用其他日期时间替换日期时间值?

android - 房间持久性库查询 COLLATE LOCALIZED 不起作用

database - 使用 MongoDB 查找文档,该数组包含作为特定单词的子字符串的字符串

javascript - 将 JS var 存储到数据库中

mysql - 简单存储DB的设计

php - 将多个结果的子查询合并为一个

php - 如何安全地将个人 Mac OS X 10.9.2 连接到实时服务器数据库以进行表格数据处理?

mysql - 如何创建mysql数据库模式文件?

mysql - 带有嵌套选择的sql插入语句