繁体   English   中英

(Django)MySQL外键级联是否首先删除父级或子级

[英](Django) Does MySQL foreign key cascade delete parent or children first

当前,我将Django与MySQL后端数据库一起使用。

让我们拥有以下数据库架构

class Parent(models.Model):
     parent_id  = models.BigAutoField(primary_key=True)
     last_child = models.ForeignKey('Child', on_delete=models.PROTECT)

class Child(models.Model):
     child_id = models.BigAutoField(primary_key=True)
     parent   = models.ForeignKey('Parent', on_delete=models.CASCADE)

每个父母可以有多个孩子,但每个孩子只能有一个父母。 字段last_child指向父母last_child的最后一个孩子。 我想通过这种模式表达的是

  • 只要最后一个孩子还活着,他就不会死亡(被删除)

  • 父母去世时所有子女都去世

但是,由于PROTECTCASCADE的冲突,我对数据库的完整性有些担忧。

我的问题是,MySQL应该先尝试删除哪些内容,然后再删除Parent 它会先删除Parent然后尝试删除Child行,还是相反?

Django在删除对象时的作用->首先删除所有子对象,然后再删除对象。

您的架构有点奇怪,您需要使last_child对象为可null-able ,因为您将如何创建没有childrenparent

您不能创建没有parentchild ,也不能创建带有last_childparent

因此,当您使last_child null时,需要在parent.delete上设置last_child = null ,然后调用parent.delete() 我想你会没事的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM