外键约束(重要)
7.6、外键约束(foreign key,简称FK) (重要)
外键约束涉及到:
外键约束
外键字段
外键值
业务背景:请设计数据库表,来描述“班级和学生”的信息?
第一种方案:班级和学生存储在一张表中
上述方案数据冗余,空间浪费
第二种方案:班级一张表,学生一张表
没有给cno班级编号添加约束,可能会导致数据无效,可能出现一个102,但是102不存在
所以为了保证cno字段中的值是100和101,需要诶cno字段添加外键约束。
那么:cno字段就是外键字段,cno字段中的每一个值都是外键值
注意:
t_class是父表
t_student是子表
删除表的顺序?
先删子,再删父
创建表的顺序?
先创父,后创子
删除数据的顺序?
先删子,后删父
插入数据的顺序?
先创父,后创子
drop table if exists t_student;
drop table if exists t_class;
create table t_class(
classno int primary key,
classname varchar(255)
);
create table t_student(
no int primary key auto_increment,
name varchar(255),
cno int,
foreign key(cno) references t_class(classno) //引用外键约束
);
insert into t_class(classno,classname) values(100,'...');
insert into t_class(classno,classname) values(101,'...');
思考:子表中的外键引用父表中的某个字段,被引用的这个字段必须是主键吗?
不一定是主键,但至少具有unique约束
思考:外键可以为NULL吗?
外键值可以为NULL