外键约束
外键:外键约束是指表中某个字段的值依赖于另一张表中某个字段的值,而被依赖的字段必须且有主键约束或者唯一约束。
被依赖的表我们通常称之为父表或者主表,设置外键约束的表称为字表或从表。
外键约束:(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