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

SQL Create Trigger Before Delete vs. Foreign Key On Delete

我有一个 table 引用了另一个。如我所见-删除级联有两种方法:

CREATE TRIGGER BEFORE DELETEFOREIGN KEY ON DELETE有什么区别?性能有什么不同吗?

我想到了FOREIGN KEY的这个优势:
级联删除更明显,因为它附加在 table 定义中。

完整问题:
我有两个 table:
project(id, ...) <- works_on(id, project_id, ...)

有什么区别

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

CREATE TRIGGER trigger_delete_cascading
  BEFORE DELETE ON project
  DELETE works_on
    WHERE project_id = id;

如果在删除之前写入触发器,将 DELETE 来自 CHILD TABLE 的记录,并且由于某些服务器错误或其他限制如果记录无法从 MAIN TABLE(PARENT) 中删除,那么它会生成冗余数据。 因此,每当您需要删除以及更多操作(例如维护 LOG table)时,只需使用 Trigger.Otherwise ON DELETE CASCADE 就可以了。 希望对你有帮助。

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

中不存在的值

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