如果在mysql中删除父行,如何自动删除所有引用行?
Posted
技术标签:
【中文标题】如果在mysql中删除父行,如何自动删除所有引用行?【英文标题】:How to delete automatically all reference rows if parent row get deleted in mysql? 【发布时间】:2014-02-13 14:25:02 【问题描述】:我有一个包含大约 50 个表的数据库。
假设我有一个名为 parent 的表,其 id 主键和 24 个大约参考此父表的子表。
我没有使用删除级联。 我已经搜索过关于连接可以在所有子表中执行删除。但是加入 20-30 张桌子?太多了。
如果父级被删除,请告诉我是否有任何其他解决方案可以删除所有这些子行。
【问题讨论】:
那么,为什么不使用“on delete cascade”呢?如果 FK 就位,那么在没有级联规则的情况下甚至都无法删除:因为听起来没有错误,所以 FK 关系仍然没有正确设置,应该首先完成(并包括级联 while更新架构)。 【参考方案1】:您可以使用 ON DELETE CASCADE。
ALTER TABLE childTable
ADD CONSTRAINT `FK_key` FOREIGN KEY (`childColumnName`)
REFERENCES parentTable(`parentColumnName`) ON UPDATE CASCADE ON DELETE CASCADE
或
在父表上创建AFTER DELETE TRIGGER
。添加子表的 DELETE 查询。
DELIMITER $$
CREATE
TRIGGER `tn_aur_department_master` AFTER DELETE ON `tn_parentTable`
FOR EACH ROW BEGIN
DELETE FROM childTable WHERE parentId = old.parentId;
END;
$$
DELIMITER ;
【讨论】:
我已经说过我有 20 到 30 个子表用于父表,所以我不能每个都去改变。有没有其他可能的方法来做到这一点。触发方法也很有帮助,但我必须再次为此编写 20-30 条删除语句。 @AamirSohail:那么为所涉及的表编写alter table
once 有什么问题?从长远来看,任何其他解决方案都会做得更多。以上是关于如果在mysql中删除父行,如何自动删除所有引用行?的主要内容,如果未能解决你的问题,请参考以下文章
TypeORM/MySQL:无法删除或更新父行:外键约束失败