仅在没有对其他表的引用时才删除条目

时间:2018-06-12 11:41:52

标签: mysql sql foreign-keys

我有三张桌子:

父: 表A:

id tab_b tab_c
1  b1    c1
2  b1    c2

两个子表: 表b:

id name
b1 ABC
FOREIN KEY (id) REFERENCES table A (tab_b) ON DELETTE CASCADE

表c:

id name
c1 DEF
c2 GHI
FOREIN KEY (id) REFERENCES table A (tab_c) ON DELETTE CASCADE

如果我想删除表c中的c2,则只应删除表C中的条目c2和表A中的条目2。只有在没有更多参考条目的情况下才应删除b1。实际上,表b中的条目也将被删除。 (我也尝试使用RESTRICT,但没有任何东西会被删除)。是否可以使用ON DELETE / ON UPDATE和CASCADE / RESTRICT进行此操作?

或者我已经在php中编程了这个程序吗?

我希望很清楚我想要的是什么。

提前致谢

1 个答案:

答案 0 :(得分:0)

使用FK时,您可以定义" ON DELETE"使用" CASCADE"," RESTRICT"或" SET NULL"。删除条目时,即其他条目中的FK," CASCADE"将删除它们," SET NULL"将FK设置为​​" NULL"和" RESTRICT"将停止整个过程。

据我所知,你想要的是相反的。如果你有三张桌子" A"," B"和" C"在哪里" A"包含" n-n"参考,你必须是棘手的。类似的东西:

DELETE IGNORE  B, C
FROM    B
INNER JOIN  A
    ON      A.tab_b = B.id
INNER JOIN  C
    ON      A.tab_c = C.id
WHERE       c.id = ?;

如果这不起作用,请设置" ON DELETE CASCADE"在" A"中,删除" C"中的项目。手动并使用" AFTER DELETE TRIGGER"照顾" B"。