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`;执行结果如下:
外键已经消失了。
好了,下面大家自己测试一下,一定要多多练习。
感谢楼主,又涨知识了。 少有的看了不犯困的教程,浅显易懂,非常好 看到这篇文章后顿时萌生了学好mysql的念头。 没有多年的实战经验讲不到这种程度,确实不错。 之前懵懵懂懂,看了这篇教程恍然大悟~ 呦西,原来如此 我又来卷了 难得一见的一看就懂的好教程,给力 难得一见的好教程