SQL删除前创建触发器与删除外键

时间:2017-02-08 13:42:24

标签: mysql sql foreign-keys sql-delete cascading-deletes

我有一个表引用另一个表。我认为 - 有两种方法可以删除级联:

<{1}}和CREATE TRIGGER BEFORE DELETE之间的区别是什么?表现有什么不同吗?

我想出了FOREIGN KEY ON DELETE的这一优势:
级联删除更加明显,因为它附加在表定义中。

完整的问题:
我有两张桌子:
FOREIGN KEY

有什么不同
project(id, ...) <- works_on(id, project_id, ...)

CREATE TABLE works_on (
  ...
  FOREIGN KEY (project_id) REFERENCES project ON DELETE CASCADE
  ...
);

2 个答案:

答案 0 :(得分:3)

如果在删除之前写入触发器,将从 CHILD TABLE DELETE 记录,并且由于某些服务器错误或其他约束,如果记录无法从 MAIN TABLE中删除(父母)然后它会产生冗余数据。 因此,每当您需要删除以及更多操作(如维护LOG表)时,只需要使用Trigger.Otherwise ON DELETE CASCADE非常适合工作。 希望这会对你有所帮助。

答案 1 :(得分:3)

FOREIGN KEY将限制可以存储在project_id表的works_on列中的值。您将无法设置project表中不存在的值。

TRIGGER不限制可以存储的值范围。