1. 程式人生 > >【0016】MySQL外來鍵約束刪除時和更新時各取值的含義

【0016】MySQL外來鍵約束刪除時和更新時各取值的含義

1、準備測試工作

建立2個表,分別為studnet 學生表和monitor 班長表

學生表有學號和姓名2個屬性;

班長表有班級和學號2個屬性。

班長表設定外來鍵學號,連線主表學生表的學號屬性。

並插入資料如圖:



2、刪除時屬性,可能取值如上圖為:預設(RESTRICT),RESTRICT,No ACTION,CASCADE,SET NULL屬性。


當取值為No Action或者Restrict時,則當在父表(即外來鍵的來源表)中刪除對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則不允許刪除。





當取值為Cascade時,則當在父表(即外來鍵的來源表)中刪除對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則也刪除外來鍵在子表(即包含外來鍵的表)中的記錄。




當取值為Set Null時,則當在父表(即外來鍵的來源表)中刪除對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則設定子表中該外來鍵值為null(不過這就要求該外來鍵允許取null)。




3、更新時屬性,可能取值如上圖為:預設(RESTRICT),RESTRICT,No ACTION,CASCADE,SET NULL屬性。

當取值為No Action或者Restrict時,則當在父表(即外來鍵的來源表)中更新對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則不允許更新。

當取值為Cascade時,則當在父表(即外來鍵的來源表)中更新對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則也更新外來鍵在子表(即包含外來鍵的表)中的記錄。

當取值為Set Null時,則當在父表(即外來鍵的來源表)中更新對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則設定子表中該外來鍵值為null(不過這就要求該外來鍵允許取null)。


更新時同理!!!不測試了!

4、總結

外來鍵的使用對於減少資料庫冗餘性,以及保證資料完整性和一致性有很大作用。

另外注意,如果兩張表之間存在外來鍵關係,則MySQL不能直接刪除表(Drop Table),而應該先刪除外來鍵,之後才可以刪除。

所以一般預設就好(RESTRICT)。