如何在不引用 parent 的情况下对 children 进行级联删除

How to CASCADE deletion to children without reference to the parent

是否可以在 parent 删除时将 child 行的级联删除应用于此 MySQL 架构?

CREATE TABLE parent (
    id INTEGER,
    specialChildrenId INTEGER,
    PRIMARY KEY (id)
)

-- Always 1:1 related to whatever references it
-- (not necessarily referenced by parent)
CREATE TABLE child (
    id INTEGER,
    PRIMARY KEY (id)
)

我无法将 child 的引用引用到 parent,因为在我的应用程序中 child 可以是 1:1 与 parent 相关或 1:1 与另一个完全不同的 table.

相关

作为一个好习惯,您应该始终将外键放在子 table 中,如果它引用另一个 table,则添加另一个外键。在这种情况下,您的删除查询将如下所示:

delete from child where parent_id=#{parentId}

但在您的情况下,您必须使用此查询:

delete from child where id=
(select specialChildrenId from parent where id=#{parentId})

您可以在两个(或更多)父表上添加触发器以在删除之前删除子行,如下所示:

delimiter |

CREATE TRIGGER tr_parent_delete BEFORE DELETE ON parent
  FOR EACH ROW
  BEGIN
    DELETE FROM child WHERE id = OLD.specialChildrenId;
  END;
|

delimiter ;