【0016】MySQL外來鍵約束刪除時和更新時各取值的含義
阿新 • • 發佈:2019-01-05
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)。