我有三张table:
父项:表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中的条目也将被删除(我也尝试了限制,但没有什么会被删除)。有没有可能在删除/更新和层叠/限制时这样做?
或者我必须用php编程?
希望如此´很清楚我想要什么。
提前谢谢
1条答案
按热度按时间oprakyz71#
使用fks时,您可以使用“cascade”、“restrict”或“set null”定义“on delete”。当删除一个条目时,它是其他条目中的fk,“cascade”将删除它们,“set null”将把fk设置为“null”,而“restrict”将停止整个过程。
据我所知,你想要的恰恰相反。如果您有三个表“a”、“b”和“c”,其中“a”包含“n-n”引用,那么您就必须小心了。比如:
如果不起作用,则在“a”中设置“on delete cascade”,手动删除“c”中的项目,并使用“after delete trigger”来处理“b”。