当前位置:网站首页>MySQL外键约束怎么创建
MySQL外键约束怎么创建
2022-07-29 15:46:00 【亿速云】
MySQL外键约束怎么创建
这篇文章主要介绍“MySQL外键约束怎么创建”,在日常操作中,相信很多人在MySQL外键约束怎么创建问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL外键约束怎么创建”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
一、MySQL外键约束作用
外键约束(Foreign Key)即数据库中两个数据表之间的某个列建立的一种联系。这种联系通常是以实际场景中含义完全相同的字段所造成的。MySQL通过外键约束的引入,可以使得数据表中的数据完整性更强,也更符合显示情况。下面,我举一个例子来说明MySQL外键约束的作用。
假如我们对大学学生成绩管理系统建立数据库,有两张表,一张表是学生表,存储了学生的学号、姓名、性别、院系等信息,还有一张表是成绩表,存储了学生学号、课程编号、考试成绩等信息。这样,这两张表之间就会通过学生学号建立外键约束。很自然的我们想到,成绩表的学生学号依赖于学生表的学生学号存在,如果一个学生毕业、或者退学,从学生表中删除时,那么他的相关成绩也就没有必要在成绩表中存在了。在没有创建外键关系之前,这两张表完全是独立存在的,我们可以强行在成绩表中插入一个不存在学生的相关成绩,也可以强行删除学生表中的一个学生,并且不管其成绩信息是否在成绩表中存在。但是,在建立外键关系后,MySQL数据库会约束上述两种行为,每次对数据进行插入或者删除时,都会检查数据完整性,使得我们的操作必须符合实际情况。
二、外键约束创建
(一)创建外键约束的条件
MySQL数据库外键的创建,需要满足以下四个条件,否则会被MySQL数据库拒绝:
1、创建外键的表和列存在
2、组成外键的列存在索引
3、必须指定数据表的引擎为InnoDB
4、外键字段和关联字段,数据类型必须一致
(二)在创建数据表时创建外键约束
在创建数据表时创建外键约束,只需要在创建数据表的create语句后面,使用foreign key关键字指定本表的外键字段,使用reference关键字指定关联表的关联字段,并且明确约束行为即可。
创建外键约束的SQL语句示例如下:
create table student (id int(8),name varchar(20),department varchar(20) ,index (id))ENGINE=InnoDB;create table grade (Sid int(8),Cid int(10),score int,index(Sid),foreign key (Sid) references student(id) on delete restrict on update cascade)ENGINE=InnoDB;
在上述SQL语句中,on delete restrict 是指明在删除时外键会对该删除操作进行限制,而on update cascade是指名在更新时会对该更新操作进行同步。
(三)在创建数据表后添加外键约束
同样的,MySQL也支持在创建数据表后再添加外键约束。在上例中,我们先删除grade表,然后再创建grade表,现不创建外键,尝试在创建grade表后添加外键,相关SQL命令如下:
drop table grade;create table grade(Sid int(8),Cid int(10),score int);alter table grade add index(Sid);alter table grade add foreign key (Sid) references student(id) on delete restrict on update cascade;
执行结果如下:

三、外键约束功能演示
下面,我们就来测试一下外键约束的功能,首先,尝试向grade表插入一个不存在学生的成绩,发现被拒绝:

之后,尝试删除student表中存在成绩的学生,发现被拒绝:

紧接着,我们测试一下MySQL外键约束级联更新功能,发现,如果更改了student表中的数据,grade表也会跟着变动,如下所示:

到此,关于“MySQL外键约束怎么创建”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
边栏推荐
- ES6 from entry to master # 11: the Map data type
- Practice of Weibo Advertising Operation and Maintenance Technology Supporting Ten Billions of Requests
- uni-app判断平台开发环境和生产环境
- 如何在CentOS 8上安装PHP
- 我的 2019 年终总结
- uni-app进阶之Weex/nvu
- Altair SimSolid complex assembly meshless rapid structure simulation online seminars
- 溢价20%,瑞萨电子宣布拟以60亿美元收购Dialog
- zabbix邮件发送告警信息
- zabbix email sends alert information
猜你喜欢
随机推荐
Comparator和Comparable
化妆品行业分销渠道管理系统加强企业渠道管控能力,赋能化妆品渠道数字化升级
Rust P2P网络应用实战-1 P2P网络核心概念及Ping程序
zabbix邮件发送告警信息
uni-app判断平台开发环境和生产环境
LG卷轴屏手机曝光;三星屏下摄像头新机曝光
3. SAP ABAP OData 服务诊断工具 /IWFND/ERROR_LOG 的使用方法
Linux下载安装mysql5.7版本教程最全详解
数字孪生万物可视 | 联接现实世界与数字空间
Twin all things digital visual | join the real world and the digital space
HMS Core音频编辑服务音源分离与空间音频渲染,助力快速进入3D音频的世界
电子元器件行业B2B交易系统:规范企业交易流程,提升销售管理效率
See you in shenzhen!Cloud native to accelerate the application building special: see cloud native FinOps, SRE, high-performance computing scenario best practices
数字赋能机械制造业,供应链协同管理系统解决方案助力企业供应链再升级
cmake(14):利用set_property命令设置全局属性
图文结合纯c手写内存池
最新!多交的税可以退,同学,你今天退税了吗?
解题-->在线OJ(十七)
MLX90640 红外热成像仪开发笔记(九)
Store Information Management System

![[MySQL] 排序与分页](/img/39/2437714e6d154c3c98c6ccdad06d32.png)







