Triggers logic causes error

佐手、 提交于 2019-12-11 06:05:22

问题


I'm making MySql database, where I have film table:

  • id
  • title
  • amount
  • available
  • description

and copy table with foreign key film_id:

  • id
  • film_id

And now I've written after delete trigger on copy:

UPDATE `film`
            SET available = available - 1
WHERE OLD.film_id = id;

And now I would like to write before delete trigger on film, due to fact that film is contrained by copy so I write:

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

Here error occurs:

Can't update table 'film' in stored function/trigger because it already used by statement which invoked this stored function/trigger.

I would like to delete film -> delete copy -> update film (ERROR)


回答1:


It looks like you do not need the trigger at all. Instead, you can configure FOREIGN KEY in such a way that entries in copy table will get deleted if a parent record in film gets deleted. Have a look at MySQL's documentation here. You need to use CASCADE option:

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.

This is how the FOREIGN KEY syntax will look like:

CONSTRAINT fk_film_id FOREIGN KEY (film_id) REFERENCES film(id) ON DELETE CASCADE;


来源:https://stackoverflow.com/questions/43969365/triggers-logic-causes-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!