mysql外键(foreign key)

简介

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; 

注意事项

  1. 外键指向的主表字段要求是primary key或unique
  2. 表必须为innodb,才支持外键
  3. 外键与主键类型需一致
  4. 外键可以为null,为null时主表中可以不存在对应的null。

猜你喜欢

转载自blog.csdn.net/weixin_44866921/article/details/132882882
今日推荐