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;

执行结果如下:

MySQL外键约束知识点有哪些

三、外键约束功能演示

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

MySQL外键约束知识点有哪些
之后,尝试删除student表中存在成绩的学生,发现被拒绝:

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

MySQL外键约束知识点有哪些

到此,关于“MySQL外键约束知识点哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

文章标题:MySQL外键约束知识点有哪些,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/25522

(1)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云认证作者
上一篇 2022年9月15日 下午11:26
下一篇 2022年9月15日 下午11:27

相关推荐

  • Android基于方法池与回调怎么实现登录拦截

    一、使用通知与回调 其实本质逻辑就是想判断用户是否已经登录,然后跳转到登录页面,登录完成之后再跳转到个人中心,那我们使用通知回调不就行了吗? 在登录完成之后发出通知,在首页我们接受这个通知就调用去个人中心的方法不就行了吗? 使用通知的方式有很多,这里我们以LiveEventBus为例: public…

    2022年8月27日
    45100
  • WEB开发中常见漏洞防御方法是什么

    SQL注入漏洞 SQL注入漏洞产生原因及危害 在sql查询中很多程序员会将变量拼接入sql语句后再进行查询,这样如果黑客在参数中插入其他sql语句就可能导致我们网站的密码被被黑客查询出来或者被拖取大量数据,如果在开发中使用了字符串拼接进SQL语句就必须进行严格的过滤,任何用户输入的内容都不可信任,以…

    2022年9月26日
    61100
  • Java怎么通过动态代理实现一个简单的拦截器操作

    一、代理 在使用动态代理实现拦截器之前我们先简单了解一下什么Java的代理。 代理,顾名思义,就是不直接操作被代理(下面都用目标对象称呼,听起来舒服一些)对象,而是通过一个代理对象去间接的使用目标对象中的方法。代理分为两种模式,一种是静态代理,一种是动态代理。接下来先写一个静态代理的例子。 无论是静…

    2022年8月27日
    65800
  • SQL Server备份数据库的方法

    一.首先把当前的数据库备份成一个文件 1.按照操作来,选择对应的数据库, 确定备份文件的存储位置 点击确定,生成备份文件。 2.然后可以通过该备份文件还原数据库。 右键数据库点击还原文件和文件组 然后设置目标数据库的名字,如果数据库中已经存在相同名字的,则需要修改或者删除原来同名的数据库,然后在选择…

    2022年9月11日
    55300
  • 知识库软件有哪些

    这里整理了国内外较好用的10款知识库软件,适用对象从团队到个人,他们分别是:1、PingCode Wiki;2、Baklib;3、有道云笔记;4、印象笔记;5、RemNote;6、石墨文档;7、Notion;8、语雀;9、幕布;10、Obsidian。具体功能我们将在文章中介绍。 一、团队知识库软件…

    2022年3月18日
    6.3K00
  • Js变量or循环中的var和le的介绍

    目录 在for循环中使用var声明初始化带来的问题 解决方法 使用闭包 使用let变量初始化 for循环怎么处理用let和var声明的初始化变量? 总结 在for循环中使用var声明初始化带来的问题 // 一道经典面试题:var funcs = [];for (var i = 0; i < 3…

    2022年9月13日
    58000
  • jquery如何实现div渐隐效果

    三种实现方法:1、用fadeOut()逐渐改变被选元素的不透明度,从可见到隐藏,语法“元素对象.fadeIn(渐隐时长)”;2、用fadeTo()逐渐改变被选元素的不透明度,语法“元素对象.fadeTo(渐隐时长,0)”;3、用fadeToggle()逐渐改变被选元素的不透明度,语法“元素对象.fa…

    2022年9月16日
    71600
  • MySQL中数据库优化的常见sql语句有哪些

    1.SHOW ENGINES 查看执行引擎以及默认引擎。 2.SHOW PROCESSLIST SHOW PROCESSLIST查看当前数据库连接的使用情况,以及各种状态信息,非常有用。SHOW PROCESSLIST; 只列出前100条,如果想全列出请使用SHOW FULL PROCESSLIST…

    2022年9月1日
    37800
  • 0xc000007b无法启动软件如何解决

    因为有些应用程序在运行时需要安装必须的组件,如果没有安装的话,可能就会在启动时弹出0xc000007b无法启动软件的提示,这时候我们只要为电脑安装他们就可以了,下面一起来看看吧。 0xc000007b无法启动软件怎么办: 方法一: 1、如果我们不知道安装什么组件,那么可以下载安装一个修复软件。【di…

    2022年9月16日
    70500
  • windows nvidia驱动缓存如何清理

    nvidia驱动缓存能清理吗 答:nvidia驱动缓存能清理, 驱动缓存是驱动更新安装时留下的。 如果我们已经完成更新,就没有用了。 nvidia驱动缓存清理教程: 1、首先进入我的电脑“C:Program Files”位置。 2、在其中找到“NVIDIA corporation”文件夹,将它删除。…

    2022年8月29日
    1.9K00
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部