MySQL的外键约束用来在两个表数据之间建立链接,其中一张表的一个字段被另一张表中对应的字段约束。也就是说,设置外键约束至少要有两种表,被约束的表叫做从表(子表),另一张叫做主表(父表),属于主从关系。
现在有两张表my_class(主表)、my_stu(从表),主表与从表通过id连接。
创建表的sql语句:
#主表
CREATE table my_class(
id int PRIMARY KEY,
`name` VARCHAR(32) not null
)
#从表
CREATE table my_stu(
id int PRIMARY KEY,
`name` VARCHAR(32),
class_id int ,
foreign key(class_id) REFERENCES my_class(id)
)
1.从表插入数据时,主表中一定要有对应的外键。
my_class表(主表):
id(主键) | name |
---|---|
1 | 小班 |
2 | 中班 |
3 | 大班 |
insert into my_stu(id,name,class_id) values(1,"小花",4); #错误,class_id=4在主表中找不到对应的id=4
insert into my_stu(id,name,class_id) values(1,"小花",3); #正确,符合外键约束规范,主表中存在id=3
2.主表数据删除时,一定要确保从表中没有与删除数据相关联的数据。
比如现在存在my_stu表:
id(主键) | name | class_id(外键) |
---|---|---|
1 | 小花 | 1 |
2 | 小红 | 2 |
3 | 小张 | 3 |
因为从表中存在(1,小花,1),所以下面的删除会报错。
delete from my_class where id=1; #错误
应当先删除从表中关联数据,再删除主表中的数据。
delete from my_stu where class_id=1;#删除从表关联数据
delete from my_class where id=1;