关于外键约束
外键约束
外键约束(FOREIGN KEY,缩写FK)是⽤来实现数据库表的参照完整性的。外键约束可以使两张表紧密的结合起来,特别是针对修改或者删除的级联操作时,会保证数据的完整性。
外键是指表中某个字段的值依赖于另⼀张表中某个字段的值,⽽被依赖的字段必须具有主键约束或者唯⼀约束。被依赖的表我们通常称之为⽗表或者主表,设置外键约束的表称为⼦表或者从表。举个例⼦:如果想要表⽰学⽣和班级的关系,⾸先要有学⽣表和班级表两张表,然后学⽣表中有个字段为stu_clazz(该字段表⽰学⽣所在的班级),⽽该字段的取值范围由班级表中的主键cla_no字段(该字段表⽰班级编号)的取值决定。那么班级表为主表,学⽣表为从表,且stu_clazz字段是学⽣表的外键。通过stu_clazz字段就建⽴了学⽣表和班级表的关系。
【⽰例5】表的外键约束
-- 创建⼀个班级表
create table class (
cno int(4) auto_increment,  -- 只有主键才可以⾃增
cname varchar(12) not null,
room  varchar(4),
primary key(cno)
);
-- insert into class values (null,'Java001',507);
-- insert into class values (null,'Java002',502);
-- insert into class values (null,'⼤数据001',401);
insert into class values (null,'Java001',507),(null,'Java002',502),(null,'⼤数据001',401);
-- 查询数据
select * from class
-- 创建⼀个学⽣表
create table student2(
sno int(6) primary key auto_increment,
name varchar(12),
sex char(1),
age int(2),
classno int(4),
constraint fk_stu2_classno foreign key (classno) references class(cno)
);
desc student2;
foreign key references用法insert into student2 values(null,'zhangsan','男',23,1);
insert into student2 values(null,'lisi','男',24,1);
insert into student2 values(null,'wangwu','男',16,2);
insert into student2 values(null,'zhaoliu','男',24,4);  --
delete from class where cno = 1
update class set cno = 5 where cno = 2
select * from class
select * from student2
-- 如果想删除1班,请⼿动的先对1班的学⽣进⾏处理(删除或者清空外键)
update student2 set classno = null where classno = 1
delete from class where cno = 1
-- 希望在更新班级编号的时候,可以直接更新学⽣的班级编号;希望在删除某个班级的时候,清空学⽣的班级编号
-- 修改外键设置:外键要修改只能先删除再添加
alter table student2 drop foreign key fk_stu2_classno; -- 注意提⽰的问题,其实已经删除了外键
alter table student2 add constraint fk_stu2_classno foreign key (classno) references class(cno) on delete set null on update cascade

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。