外键约束(Foreign Key)即数据库中两个数据表之间的某个列建立的一种联系。这种联系通常是以实际场景中含义完全相同的字段所造成的。MySQL通过外键约束的引入,可以使得数据表中的数据完整性更强,也更符合显示情况。
在 MySQL 中,外键约束是一种用于维护表之间关系的约束。外键约束可以用来指定一个或多个列作为外键,并将其连接到另一个表中的主键或唯一键上。这可以确保数据的完整性,并支持关系型数据库的引用完整性。
下面,我举一个例子来说明MySQL外键约束的作用。
假如我们对大学学生成绩管理系统建立数据库,有两张表,一张表是学生表,存储了学生的学号、姓名、性别、院系等信息,还有一张表是成绩表,存储了学生学号、课程编号、考试成绩等信息。这样,这两张表之间就会通过学生学号建立外键约束。很自然的我们想到,成绩表的学生学号依赖于学生表的学生学号存在,如果一个学生毕业、或者退学,从学生表中删除时,那么他的相关成绩也就没有必要在成绩表中存在了。在没有创建外键关系之前,这两张表完全是独立存在的,我们可以强行在成绩表中插入一个不存在学生的相关成绩,也可以强行删除学生表中的一个学生,并且不管其成绩信息是否在成绩表中存在。但是,在建立外键关系后,MySQL数据库会约束上述两种行为,每次对数据进行插入或者删除时,都会检查数据完整性,使得我们的操作必须符合实际情况。
定义外键时,需要遵守下列规则:
在 CREATE TABLE 语句中,通过 FOREIGN KEY
在创建数据表时创建外键约束,只需要在创建数据表的create语句后面,使用foreign key关键字指定本表的外键字段,使用reference关键字指定关联表的关联字段,并且明确约束行为即可。
[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…]
REFERENCES <主表名> 主键列1 [,主键列2,…]
示例
1、创建一个班级表
create table class (
cno int(4) auto_increment,
cname varchar(12) not null,
room varchar(4),
primary key(cno)
);
2、插入数据
insert into class values (null,'bigdata001',101);
insert into class values (null,'bigdata002',102);
insert into class values (null,'bigdata003',101);
3、查询数据
select * from class;
4、创建一个学生表
create table student(
sno int(6) primary key auto_increment,
name varchar(12),
sex char(1),
age int(2),
classno int(4),
constraint fk_stu_classno foreign key (classno) references class(cno)
);
当外键约束被添加后,以下行为会发生:
5 插入数据
insert into student values(null,'张三','男',23,1);
insert into student values(null,'李四','男',24,1);
insert into student values(null,'王五','男',16,2);
6、查询student表数据
select * from student
7、尝试删除、更改1班
delete from class where cno=1;
update class set cno=5 where cno=2;
因为存在外键,class表中cno=1中有学生存在,所以删除不了。
如果想删除1班,请手动先对1班学生进行处理(删除或者清空外键)
update student set classno=null where classno=1;
8、再次删除cno=1的班级
delete from class where cno=1;
9、修改外键设置:外键要修改只能先删除再添加
如果希望在更新班级号的时候,可以直接更新学生的班级编号;希望在删除某个班级的时候,清空学生的班级编号
(1)删除外键
alter table student drop foreign key fk_stu_classno;
2)修改外键设置
alter table student add constraint fk_stu_classno foreign key(classno) references class(cno) on delete set null on update cascade;
通过创建外键约束,当进行插入或更新操作时,数据库会自动检查外键的值是否存在于参照表中的主键或唯一键中。如果外键引用不存在,操作将被拒绝,并引发错误。
需要注意以下几点:
上述是在 MySQL 中使用外键约束的基本步骤。外键约束可以帮助维护表之间的关系,并确保数据的一致性和完整性。