我有三张桌子:
父: 表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中编程了这个程序吗?
我希望很清楚我想要的是什么。
提前致谢
答案 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"。