MySQL外键约束(Foreign Key)案例详解

 更新时间:2022年06月28日 12:10:13   作者:永远是少年啊  
MySQL外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用,下面这篇文章主要给给大家介绍了关于MySQL外键约束(Foreign Key)的相关资料,需要的朋友可以参考下

今天继续给大家介绍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外键约束(Foreign Key)案例详解的文章就介绍到这了,更多相关MySQL外键约束内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL错误Forcing close of thread的两种解决方法

    MySQL错误Forcing close of thread的两种解决方法

    这篇文章主要介绍了MySQL错误Forcing close of thread的两种解决方法,需要的朋友可以参考下
    2014-11-11
  • Centos7下无法远程连接mysql数据库的原因与解决

    Centos7下无法远程连接mysql数据库的原因与解决

    MySQL是由Oracle公司开发的开源SQL数据库管理系统,下面这篇文章主要给大家介绍了关于在Centos7下无法远程连接mysql数据库的原因与解决方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • SQL Server 2005 安装遇到的错误提示和解决方法

    SQL Server 2005 安装遇到的错误提示和解决方法

    在安装SQL Server 2005时有时会出现意想不到的问题,如IIS,性能计数器,OWC11,无法配置外围应用的问题,下面笔者分享一下在安装SQL Server 2005时常见问题解决方法
    2014-01-01
  • MySQL5.7慢查询日志时间与系统时间差8小时原因详解

    MySQL5.7慢查询日志时间与系统时间差8小时原因详解

    这篇文章主要介绍了MySQL5.7慢查询日志时间与系统时间差8小时原因详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 一篇文章带你了解MySQL数据库约束

    一篇文章带你了解MySQL数据库约束

    数据库中要管理很多数据,但是这些数据是否正确、是否非法,光靠人力来检验是远远不够的,因此我们想让数据库拥有丰富的检验和校验能力,所以便引入了约束,下面这篇文章主要给大家介绍了关于MySQL数据库约束的相关资料,需要的朋友可以参考下
    2023-06-06
  • MySQL数据库定时任务举例讲解

    MySQL数据库定时任务举例讲解

    最近项目里面的后台需要用到定时任务,而MySQL从5.0开始自带了定时事件操作,所以学习下并做下记录,下面这篇文章主要给大家介绍了关于MySQL数据库定时任务的相关资料,需要的朋友可以参考下
    2023-06-06
  • mysql 优化日记

    mysql 优化日记

    mysql 优化日记 使用mysql的朋友可以参考下,大家知道如果mysql优化与没优化性能会相差不少呢。
    2009-07-07
  • MySQL每晚定时弹出一个taskeng.exe的解决方法

    MySQL每晚定时弹出一个taskeng.exe的解决方法

    这篇文章主要介绍了MySQL每晚定时弹出一个taskeng.exe的解决方法,需要的朋友可以参考下
    2018-07-07
  • 详解MySQL分组排序求Top N

    详解MySQL分组排序求Top N

    这篇文章主要介绍了详解MySQL分组排序求Top N的相关资料,需要的朋友可以参考下
    2017-07-07
  • MySQL查询排序与查询聚合函数用法分析

    MySQL查询排序与查询聚合函数用法分析

    这篇文章主要介绍了MySQL查询排序与查询聚合函数用法,结合实例形式分析了MySQL查询结果排序以及查询聚合函数相关使用技巧,需要的朋友可以参考下
    2019-11-11

最新评论