外鍵:外鍵約束是指表中某個字段的值依賴於另一張表中某個字段的值,而被依賴的字段必須且有主鍵約束或者唯一約束。
被依賴的表我們通常稱之為父表或者主表,設置外鍵約束的表稱為字表或從表。
外鍵約束:(FOREIGN KEY,縮寫FK)是用來實現數據庫表的參照完整性的。
外鍵約束可以使兩張表緊密的結合起來,特別是針對修改或者刪除的級聯操作時,會保證數據的完整性。
外鍵約束只有表級約束,沒有列級約束,當然也可以在創建表以后,也能添加外鍵約束。
如:
代碼:
-- 先創建父表:班級表
create table t_class(
con int(4) primary key auto_increment,
cname varchar(10) not null,
room char(4)
);
-- 添加班級數據:
insert into t_class values (null,'Java001','r201');
insert into t_class values (null,'Java002','r203');
insert into t_class values (null,'大數據001','r301');
-- 查詢班級表
select * from t_class;
運行結果:
-- 創建子表,學生表 (注意添加外鍵約束)
create table t_student(
sno int(6) primary key auto_increment,
sname varchar(5) not null,
classno int(4), -- 取值參考t_class表中的cno字段,不要求字段名字完全重復,但是類型長度定義,盡量相同
constraint fk_stu_classno foreign key (classno) references t_class(con) -- 外鍵約束
);
-- 添加學生信息:
insert into t_student values (null,'張三',1),(null,'李四',1),(null,'王五',2),(null,'趙六',2);
-- 查看學生表
select * from t_student;
運行結果:
也可以通過創建表后,添加外鍵約束,代碼:
create table t_student(
sno int(6) primary key auto_increment,
sname varchar(5) not null,
classno int(4)
);
alter table t_student add constraint fk_stu_classno foreign key (classno) references t_student(con);
設計外鍵時,mysql提供了4種外鍵關聯策略
外鍵策略: 1、RESTRICT 限制(默認策略)
2、CASCADE 級聯
3、NO ACTION 什么也不做
4、SET NULL 置為NULL
應用場合:1.朋友圈刪除,點贊,留言刪除 --》級聯
2.解散班級,對應的學生 置為班級為null就可以了 --》set null