如何在没有引用父级的情况下将CASCADE删除到子级

时间:2017-04-28 18:18:56

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

是否可以将child删除parent行的级联删除应用于此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相关与另一个完全不同的表有关。

2 个答案:

答案 0 :(得分:1)

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

location:1

答案 1 :(得分:0)

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

delete from child where parent_id=#{parentId}

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

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