簡體   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