最近學習遇到一條添加外鍵約束的語句,記錄下來.
alter table selection add constraint FK_Reference_1 foreign key(course) references course (id) on delete restrict on update restrict;
alter table selection add constraint FK_Reference_2 foreign key(student) references student (id) on delete restrict on update restrict;
InnoDB中外鍵約束定義的語法如下:
ALTER TABLE tbl_name
ADD [CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]
轉自:https://www.cnblogs.com/ALXPS/p/8016429.html
CASCADE
在父表上update/delete記錄時,同步update/delete掉子表的匹配記錄
SET NULL
在父表上update/delete記錄時,將子表上匹配記錄的列設為null (要注意子表的外鍵列不能為not null)
NO ACTION
如果子表中有匹配的記錄,則不允許對父表對應候選鍵進行update/delete操作
RESTRICT
同no action, 都是立即檢查外鍵約束
SET NULL
父表有變更時,子表將外鍵列設置成一個默認的值 但Innodb不能識別
NULL、RESTRICT、NO ACTION
刪除:從表記錄不存在時,主表才可以刪除。刪除從表,主表不變
更新:從表記錄不存在時,主表才可以更新。更新從表,主表不變
CASCADE
刪除:刪除主表時自動刪除從表。刪除從表,主表不變
更新:更新主表時自動更新從表。更新從表,主表不變
SET NULL
刪除:刪除主表時自動更新從表值為NULL。刪除從表,主表不變
更新:更新主表時自動更新從表值為NULL。更新從表,主表不變