MySQL外键
在实际开发的项目中,一个健壮数据库中的数据一定有很好的参照完整性。例如学生表和成绩单两张表,如果成绩单中有张三的成绩,学生表中张三的档案却被删除了,这样就会产生垃圾数据或者错误数据。为了保证数据的完整性,将两张表之间的数据建立关系,因此就需要在成绩表中添加外键约束。
班级表
create table classes(
id int(4) not null primary key,
name varchar(36)
);
学生表
create table student(
sid int(4) not null primary key,
sname varchar(36),
gid int(4) not null
);
引入外键之后,外键列只能插入参照列存在的值,参照列被参照的值不能被删除,这就保证了数据的参照完整性。
添加外键
语法
alert table 表名 add constraint 外键名字 foreign key(外键字段名) references 外表表名(主键字段名)
首先将创建的两表的引擎选择为InnoDB
-- 向 student表的gid创建外键,外键名字为 fk_stu
alter table student add constraint fk_stu foreign key(gid) references classes(id);
有了这个标志后就说明添加成功
如果直接给student表内插入数据的话
所以要先给classes 表插入
insert into classes values (1,'一班'),(2,'二班'),(3,'三班');
然后给student表插入时,gid要符合classes表内id存在的值
insert into student values(1,'menmen',1);
insert into student values(2,'居然',1);
删除时要先删除student内的值,再删除classes 内相应的班级值
先删除classes内的话,会报错
最后就是删除外键约束
alter table 表名 drop foreign key 外键名;
alter table student drop foreign key fk_stu;