Mysql 外來鍵 FOREIGN KEY
阿新 • • 發佈:2018-11-29
FOREIGN KEY 外來鍵 (重點)
...,
foreign key (設定的欄位) references 主表(主鍵) on delete cascade on update cascade
);
在父表上update/delete記錄時,同步update/delete掉子表的匹配記錄
id int not null,
...,
foreign key (設定的欄位) references 主表(主鍵) on set null on set null
);
在父表上update/delete記錄時,將子表上匹配記錄的列設為null
3.3 禁止約束(restrict)
create table tableName (
id int not null,
...,
foreign key (設定的欄位) references 主表(主鍵) on delete restrict on delete restrict
);
如果子表中有匹配的記錄,則不允許對父表update/delete操作
1.過多使用外來鍵,會導致表過多,程式耗時和耗資源
2.在資料很大時,不適合用。因為在執行insert/update/delete 時都會去掃描此記錄是否合格,這很耗資源和時間。
注意:
除了InnoDB型別外其他型別的表都忽略了外來鍵保持資料完整性的功能
1. 針對從表設定外來鍵約束
2. 資料的完整性當我們在從表插入資料時,如果外來鍵值在主表中不存在,就會報錯。
3. 約束方式: 3.1 級聯約束(cascade)
create table tableName (
id int not null,...,
foreign key (設定的欄位) references 主表(主鍵) on delete cascade on update cascade
在父表上update/delete記錄時,同步update/delete掉子表的匹配記錄
3.2 置空約束 (set null)
create table tableName (
...,
foreign key (設定的欄位) references 主表(主鍵) on set null on set null
);
在父表上update/delete記錄時,將子表上匹配記錄的列設為null
3.3 禁止約束(restrict)
create table tableName (
id int not null,
...,
foreign key (設定的欄位) references 主表(主鍵) on delete restrict on delete restrict
);
如果子表中有匹配的記錄,則不允許對父表update/delete操作
優點:保證資料一致性,完整性
缺點:1.過多使用外來鍵,會導致表過多,程式耗時和耗資源
2.在資料很大時,不適合用。因為在執行insert/update/delete 時都會去掃描此記錄是否合格,這很耗資源和時間。
注意:
除了InnoDB型別外其他型別的表都忽略了外來鍵保持資料完整性的功能