人亦已歌 发表于 2023-1-19 19:58:46

Mysql数据库核心技术(二十一)添加与删除外键以及外键的使用方法

使用外键的意义是:由于在实际工作中,我们在描述一个事物时需要建立多个字段,例如:我们要描述一件商品,可能需要几十个字段。然而将多个字段全部放入一张表中这会大大降低数据查询效率,所以我们常常会将一张表拆分成多张表来存放数据,比如:我们会将一些经常查询的字段放在一张表中,或者将所有字段进行分组后用多表存放等等,然后借助外键将这些表关联起来。
下面,我们就用最直白的方式来让大家彻底理解外键的操作方法:首先我们创建两张表
create table stu888(`id`tinyint primary key,`name` varchar(10))engine=innodb;
create table stu999(`id` tinyint primary key,`sid` tinyint,`age` tinyint)engine=innodb;
语句解释:engine=innodb --使用外键必须使用innodb引擎。
stu888是主表,stu999是从表,主表的外键字段必须和从表关联字段的数据类型完全一致。
我们下面要实现的是:主表的id字段和从表的sid字段建立外键。
主表和从表都有id字段,全部设为主键。
从表中增加sid字段,数据类型和主表的id字段一致。
将从表的sid字段和主表的id字段关联为外键,删除置空,更新级联。
操作如下:
alter table stu999 add foreign key(sid) references stu888(id) on delete set null on update cascade;语句解释:
alter table stu999 add foreign key(sid) --给stu999表的sid字段添加外键,foreign key为外键关键词。
references stu888(id) --关联stu888表的id字段,references为关键词。
on --设置外键属性。
delete set null --删除置空。
update cascade --更新级联。操作结果如下:


constraint --限定条件
stu999_ibfk_1 --外键的名称

下面我们分别给主表和从表插入数据:

insert into stu888 values(1,'张三'),(2,'李四');
insert into stu999 values(1,1,33),(2,2,44);

下面我们修改主表stu888中name为李四的数据id为3,按照更新级联的原理,修改stu888表后stu999的sid字段也会自动更新为3,我们测试一下是否是这样呢
update stu888 set id=3 where name='李四';

实验结果完全符合我们的预期。
下面我们删除主表stu888中id为1的数据行,看一下从表stu999会发生什么变化。按照删除置空的原理,本操作后stu999表中sid为1的数据会置空,我们测试一下是否是这样呢
delete from stu888 where id=1;
实验结果完全符合我们的预期。


ok,以上就是外键的全部使用方法。
下面我们使用sql语句将已添加的外键删除
alter table stu999 drop foreign key `stu999_ibfk_1`;执行结果如下:


外键已经消失了。

好了,下面大家自己测试一下,一定要多多练习。

vipvip 发表于 2023-1-30 23:08:41

感谢楼主,又涨知识了。

天才白痴梦 发表于 2023-1-31 06:43:57

少有的看了不犯困的教程,浅显易懂,非常好

沙漠鱼 发表于 2023-1-31 14:17:06

看到这篇文章后顿时萌生了学好mysql的念头。

hyjzan 发表于 2023-2-1 03:49:44

没有多年的实战经验讲不到这种程度,确实不错。

chinapower 发表于 2023-2-1 18:52:11

之前懵懵懂懂,看了这篇教程恍然大悟~

寂寞的悲哀 发表于 2023-2-2 09:56:49

呦西,原来如此

8000 发表于 2023-2-3 02:01:22

我又来卷了

hongbawudi 发表于 2023-2-16 01:52:44

难得一见的一看就懂的好教程,给力

fanjin_08 发表于 2023-2-18 19:26:58

难得一见的好教程
页: [1] 2 3 4
查看完整版本: Mysql数据库核心技术(二十一)添加与删除外键以及外键的使用方法