我有一个表引用另一个表。我认为 - 有两种方法可以删除级联:
<{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
...
);
答案 0 :(得分:3)
如果在删除之前写入触发器,将从 CHILD TABLE 中 DELETE 记录,并且由于某些服务器错误或其他约束,如果记录无法从 MAIN TABLE中删除(父母)然后它会产生冗余数据。
因此,每当您需要删除以及更多操作(如维护LOG表)时,只需要使用Trigger.Otherwise ON DELETE CASCADE
非常适合工作。
希望这会对你有所帮助。
答案 1 :(得分:3)
FOREIGN KEY
将限制可以存储在project_id
表的works_on
列中的值。您将无法设置project
表中不存在的值。
TRIGGER
不限制可以存储的值范围。