gpt4 book ai didi

mysql - 仅当不再引用其他表时才删除条目

转载 作者:行者123 更新时间:2023-11-30 21:42:47 28 4
gpt4 key购买 nike

我有三个表:

家长:表 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 中编程?

我希望你清楚我想要什么。

提前致谢

最佳答案

使用 FK 时,您可以使用“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”。

关于mysql - 仅当不再引用其他表时才删除条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50816298/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com