【问题标题】:How to delete automatically all reference rows if parent row get deleted in mysql?如果在mysql中删除父行,如何自动删除所有引用行?
【发布时间】:2014-02-13 14:25:02
【问题描述】:

我有一个包含大约 50 个表的数据库。

假设我有一个名为 parent 的表,其 id 主键和 24 个大约参考此父表的子表。

我没有使用删除级联。 我已经搜索过关于连接可以在所有子表中执行删除。但是加入 20-30 张桌子?太多了。

如果父级被删除,请告诉我是否有任何其他解决方案可以删除所有这些子行。

【问题讨论】:

  • 那么,为什么不使用“on delete cascade”呢?如果 FK 就位,那么在没有级联规则的情况下甚至都无法删除:因为听起来没有错误,所以 FK 关系仍然没有正确设置,应该首先完成(并包括级联 while更新架构)。

标签: mysql sql parent-child foreign-key-relationship cascading-deletes


【解决方案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 有什么问题?从长远来看,任何其他解决方案都会做得更多。
猜你喜欢
  • 2019-03-04
  • 1970-01-01
  • 2013-06-09
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多