当前位置:网站首页>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外键约束怎么创建”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
边栏推荐
- 支持百亿请求的微博广告运维技术实践
- win10 校验sha256
- Kubernetes 的 5 个误区
- This article penetrates the architecture design and cluster construction of the distributed storage system Ceph (hands-on)
- Unable to open the source file in qt vs2015 "QtWidgets" solution
- Contribution and writing required documents - OpenHarmony developer documentation style guide
- MySQL笔记下
- 解题-->在线OJ(十七)
- 网络知识大集合(最详细)与网络通信过程
- 【Go语言刷题篇】Go完结篇函数、结构体、接口、错误入门学习
猜你喜欢
大规模线上应用TiDB会遇到的坑,本文都帮你排除好了
Moving forward steadily without forgetting the original intention, Volvo's sense of security comes from the public's recognition
化妆品行业分销渠道管理系统加强企业渠道管控能力,赋能化妆品渠道数字化升级
【PCL学习笔记】点云处理常用的库和API(PCL库+Eigen)
【小程序项目开发-- 京东商城】uni-app之商品列表页面 (上)
Do you really understand the persistence mechanism of Redis?
MySQL数据库安装配置保姆级教程(以8.0.29为例)有手就行
【设计师必学】在SketchUp中Enscape的灯光照明技巧
Qt learning on the first day
Contribution and writing required documents - OpenHarmony developer documentation style guide
随机推荐
The future trend of the conversation
Tess4J 图片文字识别
Practice of Weibo Advertising Operation and Maintenance Technology Supporting Ten Billions of Requests
Qt learning on the first day
参与一个rk3399的一起学习班级
Staggered question explanation
nacos实现基本的服务跨进程调用和使用OpenFeign进行服务跨进程调用
数字孪生万物可视 | 联接现实世界与数字空间
MySQL数据库————数据库语言(DDL与DML)
【GoLang】Sync lock
Qt combat | how to access the USB device information?
Turbine Aggregation Monitoring
属性动画(Property Animation) 、 Butterknife黄油刀的基本使用
分布式前修课:MySQL实现分布式锁
bit field in c language
数商云SCM供应链系统方案服务亮点:生产管理更智能、产业供应链协同管理更便捷
Qt笔记-利用QAxObject将文件夹内的所有docx转pdf
美国对集成电路及其产品发起337调查:英特尔/联想/宏碁/华硕/微星均涉及其中
溢价20%,瑞萨电子宣布拟以60亿美元收购Dialog
Alibaba 开源内网高并发编程手册