on delete和on update都有restrict,no action, cascade,set null屬性。現在分別對他們的屬性含義做個解釋。
on delete
restrict(約束):當在父表(即外來鍵的**表)中刪除對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則不允許刪除。
no action:意思同restrict.即如果存在從資料,不允許刪除主資料。
cascade(級聯):當在父表(即外來鍵的**表)中刪除對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則也刪除外來鍵在子表(即包含外來鍵的表)中的記錄。
set null:當在父表(即外來鍵的**表)中刪除對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則設定子表中該外鍵值為null(不過這就要求該外來鍵允許取null)
on update
restrict(約束):當在父表(即外來鍵的**表)中更新對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則不允許更新。
no action:意思同restrict.
cascade(級聯):當在父表(即外來鍵的**表)中更新對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則也更新外來鍵在子表(即包含外來鍵的表)中的記錄。
set null:當在父表(即外來鍵的**表)中更新對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則設定子表中該外鍵值為null(不過這就要求該外來鍵允許取null)。
注:no action和restrict的區別:只有在及個別的情況下會導致區別,前者是在其他約束的動作之後執行,後者具有最高的優先權執行。
模型外來鍵的邏輯刪除 on delete
刪除關聯表資料的時候與之關聯也會刪除 on delete models.cascade 刪除關聯資料的時候,什麼操作也不做 on delete models.do nothidng 刪除關聯資料的時候,引發報錯 on delete models.protect 刪除關聯資料的時候,設定為空 on d...
mysql建立外來鍵時可能遇到的問題
在mysql中建立外來鍵時,經常會遇到問題而失敗,這是因為mysql中還有很多細節需要我們去留意,我自己總結並查閱資料後列出了以下幾種常見原因。1.兩個欄位的型別或者大小不嚴格匹配。例如,如果乙個是int 10 那麼外來鍵也必須設定成int 10 而不是int 11 也不能是tinyint。另外,你...
mysql檢視外來鍵建立時間 外來鍵的建立 刪除 檢視
一 建立表的時候建立外來鍵 如果表a的主關鍵字是表b中的字段,則該字段稱為表b的外來鍵,表a稱為主表,表b稱為從表。外來鍵是用來實現參照完整性的,不同的外來鍵約束方式將可以使兩張表緊密的結合起來,特別是修改或者刪除的級聯操作將使得日常的維護工作更加輕鬆。這裡以mysql為例,總結一下3種外來鍵約束方...