只有在不再引用其他表时才删除条目

kcugc4gi  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(370)

我有三张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编程?
希望如此´很清楚我想要什么。
提前谢谢

oprakyz7

oprakyz71#

使用fks时,您可以使用“cascade”、“restrict”或“set null”定义“on delete”。当删除一个条目时,它是其他条目中的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 = ?;

如果不起作用,则在“a”中设置“on delete cascade”,手动删除“c”中的项目,并使用“after delete trigger”来处理“b”。

相关问题