mysql外键

外键是为了保证数据的完整性,但也会带来许多副作用,使用不当会使数据处理变得复杂,在数据量大的时候会明显影响性能。所以,工具是工具,具体如何使用,根据自己情况取舍。

注意:目前在mysql数据库中,只有innodb存储引擎支持外键。

外键定义:两个有关联关系的表,其中一个表中的某个字段a指向另一个表中的主键b,我们称a是外键。在它们两个的关系中,b所在表我们称之为主表,而a所在字段我们称之为从表。

如果没有定义两个表之间的关联操作,那么a只是逻辑上的外键,定义其之间的关联操作后,a才是我们今天要讨论的真正外键。

语法:foreign key (字段名) references 主表名 (字段名) on [update | delete]  [ cascade | set null | restrict ]

(1)可定义的级联操作:

on delete  定义当主表删除时记录时从表的操作

on update 定义当主表更新记录时执行的操作

(2)可设置的动作:

cascade : 串联操作,就是子表跟主表动作一样,删除或更新

set null : 当主表更改时,子表的外键字段设置为null

restrict : 限制主表做更改

举例:  

第一步:创建两张表 班级  和  学生,并且以class_id为外键对班级表关联。

create table class (
id int primary key auto_increment,
class_name varchar(20) not null
);
create table student (
id int primary key auto_increment,
name varchar(20) not null,
class_id int ,
foreign key (class_id) references class (id)
on delete cascade
on update set null
);
第二步:分别向两张表添加数据

insert into class values 
(null,'A'),
(null,'B');

insert into student values 
(null,'xiaohong',1),
(null,'xiaoming',2),
(null,'xiaogang',1);
此时我们首先看一下表中的数据,以便跟我们稍后的测验作数据对比。


第三步:删除和修改,并查看结果
刚才我们设置的是 on delete cascade,让我们来验证一下结果。


当我们删掉 class 表中的 id=1 的数据后,student 表中,class_id 为1的数据默认都帮我们删掉了。

再来一个更新的试试:

刚才我们设置的 on update set null


从数据中我们可以看到,当我们把class表中id=2的记录值的id改为3的时候,student表中class_id为2的记录class_id变为了null。

同理,restrict 动作也能得到我们预期的结果,这里就不再演示。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梧桐深院

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值