[英](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
的最后一个孩子。 我想通过这种模式表达的是
只要最后一个孩子还活着,他就不会死亡(被删除)
父母去世时所有子女都去世
但是,由于PROTECT
与CASCADE
的冲突,我对数据库的完整性有些担忧。
我的问题是,MySQL应该先尝试删除哪些内容,然后再删除Parent
? 它会先删除Parent
然后尝试删除Child
行,还是相反?
Django
在删除对象时的作用->首先删除所有子对象,然后再删除对象。
您的架构有点奇怪,您需要使last_child
对象为可null-able
,因为您将如何创建没有children
的parent
?
您不能创建没有parent
的child
,也不能创建带有last_child
的parent
。
因此,当您使last_child
null时,需要在parent.delete
上设置last_child = null
,然后调用parent.delete()
。 我想你会没事的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.