开发者社区> 凌浩雨> 正文

MySQL 外键应用

简介: 1). MySQL 引擎 show engines; 图1.png 如果InnoDB状态不可用,可参考此文激活. 2). 创建主表 create table parent(id int not null,primary key(id)) engine=innodb; 3).
+关注继续查看
1). MySQL 引擎
show engines;
img_50cd3f20576c1ac7acd42d637527897e.png
图1.png

如果InnoDB状态不可用,可参考此文激活.

2). 创建主表
create table parent(id int not null,primary key(id)) engine=innodb;
3). 创建从表
create table child(id int,parent_id int,foreign key (parent_id) references parent(id) on delete cascade) engine=innodb;
4). 主表插入数据
insert into parent values(1),(2),(3);
5). 从表插入数据
insert into child values(1,1),(1,2),(1,3),(1,4);

img_c856e9e499b20c236e5086539d8f97f7.png
图2.png

因为主表中不存在4这个数据, 插入时发生了外键约束错误

insert into child values(1,1),(1,2),(1,3);
6). 删除主表数据
delete from parent where id=1;

删除主表记录,从表也将同时删除相应记录.

7). 更新从表外键
update child set parent_id=4 where parent_id=2;

更新child中的外键,如果对应的主键不存在,则报错:


img_f15a8976525fc0aaa9f20f04bc041703.png
图3.png
update child set parent_id=2 where parent_id=2;

主表中存在的数据则更新成功.

8). 从表数据更新操作

在父表中更新或者删除一行,并且在子表中也有一行或者多行匹配,此时子表的操作有5个选择:

  • CASCADE: 从父表删除或更新且自动删除或更新子表中匹配的行。ON DELETE CASCADE和ON UPDATE CASCADE都可用。在两个表之间,你不应定义若干在父表或子表中的同一列采取动作的ON UPDATE CASCADE子句。
  • SET NULL: 从父表删除或更新行,并设置子表中的外键列为NULL。如果外键列没有指定NOT NULL限定词,这就是唯一合法的。ON DELETE SET NULL和ON UPDATE SET NULL子句被支持。
  • NO ACTION: 在ANSI SQL-92标准中,NO ACTION意味这不采取动作,就是如果有一个相关的外键值在被参考的表里,删除或更新主要键值的企图不被允许进行(Gruber, 掌握SQL, 2000:181)。 InnoDB拒绝对父表的删除或更新操作。
  • RESTRICT: 拒绝对父表的删除或更新操作。NO ACTION和RESTRICT都一样,删除ON DELETE或ON UPDATE子句。(一些数据库系统有延期检查,并且NO ACTION是一个延期检查。在MySQL中,外键约束是被立即检查的,所以NO ACTION和RESTRICT是同样的)。
  • SET DEFAULT: 这个动作被解析程序识别,但InnoDB拒绝包含ON DELETE SET DEFAULT或ON UPDATE SET DEFAULT子句的表定义。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Mysql外键设置中的CASCADE、NO ACTION、RESTRICT、SET NULL
Mysql外键设置中的CASCADE、NO ACTION、RESTRICT、SET NULL
15 0
约束,MySQL约束,非空默认值,主键外键唯一自增,完整详细可收藏
约束,MySQL约束,非空默认值,主键外键唯一自增,完整详细可收藏
115 0
linux清空mysql数据库所有表包括带外键的表
linux清空mysql数据库所有表包括带外键的表
126 0
软件测试mysql面试题:超键、候选键、主键、外键分别是什么?
软件测试mysql面试题:超键、候选键、主键、外键分别是什么?
70 0
mysql:主键、外键和索引的区别?
mysql:主键、外键和索引的区别?
40 0
软件测试mysql面试题:什么是外键?
软件测试mysql面试题:什么是外键?
20 0
软件测试mysql面试题:数据库主键、外键的作用。索引的优点与不足?
软件测试mysql面试题:数据库主键、外键的作用。索引的优点与不足?
23 0
MySQL数据库(25):外键 foreing key
MySQL数据库(25):外键 foreing key
32 0
Mysql外键设置中的CASCADE、NO ACTION、RESTRICT、SET NULL、Set DEFAULT
Mysql外键设置中的CASCADE、NO ACTION、RESTRICT、SET NULL、Set DEFAULT
111 0
MySQL初级篇——数据库中表的主键、外键及常用约束
MySQL初级篇——数据库中表的主键、外键及常用约束
79 0
+关注
凌浩雨
毕业于贵州大学大数据与信息工程学院,目前是一名移动端工程师,就职于北京乾元大通信息技术有限责任公司。
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
让 MySQL 原生分布式触手可及
立即下载
好的 MySQL 兼容可以做到什么程度
立即下载
云数据库RDS MySQL从入门到高阶
立即下载