Mysql的外鍵引擎是InnoDB,接下來介紹一下mysql的外鍵約束配置。
一、外鍵約束關系
級聯是用來設計一對多關系的。關系為:子表—>父表,箭頭方向表示子表的外鍵關聯了父表的主鍵。
外鍵約束對子表的含義:
如果在父表中找不到候選鍵,則不允許在子表上進行insert/update
外鍵約束對父表的含義:
在父表上進行update/delete以更新或刪除在子表中有一條或多條對應匹配行的候選鍵時,父表的行為取決於:在定義子表的外鍵時指定的on update/on delete子句,InnoDB支持5種方式——Default、Restrict、NO ACTION、 Cascade、SET NULL
二、五種級聯級別
設置mysql外鍵的時候會發現有兩欄:刪除時、更新時。這兩欄是設置這個外鍵的級聯級別。
如圖共有五種,第一行空白是Default,默認級別。接下來介紹一下這五種級別的差異。
. cascade方式
在父表上update/delete記錄時,同步update/delete掉子表的匹配記錄
. set null方式
在父表上update/delete記錄時,將子表上匹配記錄的列設為null
要注意子表的外鍵列不能為not null
. No action方式
如果子表中有匹配的記錄,則不允許對父表對應候選鍵進行update/delete操作
. Restrict方式
同no action, 都是立即檢查外鍵約束
. Set default方式
父表有變更時,子表將外鍵列設置成一個默認的值 但Innodb不能識別