[英](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.