目錄
1、使用場景
目前大型互聯網企業一般都禁止使用外鍵;主要是通過程序控制關聯表之中外鍵約束關係;但是一些中小企業之中開發之中還是有不少人使用外鍵約束。下面根據實際情況說明一下設置外鍵關係。
2、代碼實現
在設置外鍵的時候,刪除時和更新時兩列有四個值可以選擇:CASCADE、NO ACTION、RESTRICT、SET NULL,自己全親自試了一遍,它們的區別如下:
- CASCADE:父表delete、update的時候,子表會delete、update掉關聯記錄;
- SET NULL:父表delete、update的時候,子表會將關聯記錄的外鍵字段所在列設爲null,所以注意在設計子表時外鍵不能設爲not null;
- RESTRICT:如果想要刪除父表的記錄時,而在子表中有關聯該父表的記錄,則不允許刪除父表中的記錄;
- NO ACTION:同 RESTRICT,也是首先先檢查外鍵;
空、RESTRICT、NO ACTION | 刪除:從表記錄不存在時,主表纔可以刪除,刪除從表,主表不變。 更新:從表記錄不存在時,主表菜可以更新,更新從表,主表不變。 |
---|---|
CASCADE | 刪除:刪除主表時自動刪除從表。刪除從表,主表不變。 更新:更新主表時自動更新從表。更新從表,主表不變。 |
SET NULL | 刪除:刪除主表時自動更新從表爲NULL,刪除從表,主表不變。 更新:更新主表時自動更新從表值爲NULL。更新從表,主表不變。 |
3、總結
個人認爲建議不要使用外鍵約束,在程序之中控制外鍵關係;外鍵約束後建議在表的說明備註裏面寫明操作規則。我看我們以前的人涉及的都是 RESTRICT 意思必須刪除子表記錄後才能刪除主表記錄。
個人建議如果要設置,外鍵的主表可以選擇 CASCADE 相對可以及時更新。根據實際情況自己選定適合場景