今天继续给大家介绍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表也会跟着变动,如下所示:

原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200

MySQL外键约束详解相关推荐

  1. mysql外键约束详解_详解MySQL 外键约束

    详解MySQL 外键约束,西欧,西西里,玛雅,兵种,诺曼 详解MySQL 外键约束 易采站长站,站长之家为您整理了详解MySQL 外键约束的相关内容. 官方文档: https://dev.mysql. ...

  2. mysql 命令行 外键_MySQL命令行MySql外键设置详解

    第一招.mysql服务的启动和停止 net stop mysql net start mysql 第二招.登陆mysql 语法如下: mysql -u用户名 -p用户密码 键入命令mysql -uro ...

  3. MySQL外键(详解)

    MySQL外键(详解) 什么是外键:    外键是指引用另外一个表中的一列或多列数据,被引用的列应该具有主键约束或者唯一性约束(简单来说外键是另一个表的主键或者唯一约束).外键可以有重复的, 可以是空 ...

  4. mysql 命令行 外键_MySQL基本命令行MySql外键设置详解

    MySQL 命令行 一.mysql服务的启动和停止 net stop mysql net start mysql 二.登录mysql 语法如下:mysql  -u  用户名  -p  用户密码 键入命 ...

  5. 外键约束详解及术语释疑

    外键约束详解及术语释疑 先要理清几个概念: 1)候选键(Candidate Key):关系中的一个属性组,其值能唯一标识一个元组,若从该属性组中去掉任何一个属性,它就不具有这一性质了,这样的属性组称作 ...

  6. mysql数据库约束详解_MySQL数据库中的外键约束详解

    使用MySQL开发过数据库驱动的小型web应用程序的人都知道,对关系数据库的表进行创建.检索.更新和删除等操作都是些比较简单的过程.理论上,只要掌握了最常见的SQL语句的用法,并熟悉您选择使用的服务器 ...

  7. MySQL数据库约束(主键约束,外键约束详解)

    关系型数据库的一个重要功能: 需要保证数据的"完整性",可以通过人工的方式来观察确认数据的正确性,这种方式是可行的,但是不合适,因为人为控制的方式势必会存在疏忽,导致一些错误没有被 ...

  8. php mysql外键,MySQL外键使用详解_MySQL

    最近有开始做一个实验室管理系统,因为分了几个表进行存储·所以要维护表间的关联··研究了一下MySQL的外键. (1)只有InnoDB类型的表才可以使用外键,mysql默认是MyISAM,这种类型不支持 ...

  9. MySQL外键约束On Delete、On Update各取值的含义

    主键.外键和索引的区别?   主键 外键 索引 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 主索引(由关键字PRIMARY定义的索引) ...

  10. mysql 外键约束_MySQL之外键约束(FOREIGN KEY)

    定义: MySQL外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或者多列.一个表可以有一个或多个外键. 外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每 ...

最新文章

  1. CSDN湘苗培优,遇见更好的自己
  2. 报名 | 大数据打造智慧的政府门户讲座
  3. WebRTC的拥塞控制技术转
  4. python强制可读吗_python 中的强制类型转换
  5. mongodb 持久化 mysql_scrapy数据持久化存储(MySQL、MongoDB)
  6. MySQL zip压缩包安装
  7. Hadoop Hive替换自带的derby数据库为MySQL具体步骤
  8. Cpp 对象模型探索 / 虚基类表作用
  9. Python 基本输出
  10. Batoo JPA –比领先的JPA提供商快15倍
  11. 链表最终总结【数据结构】
  12. 面试题 08.02. 迷路的机器人
  13. python 标量_python:将标量视为一个元素列表
  14. 查看SQL Server被锁的表以及如何解锁【转】
  15. Ubuntu 16.04 Apache https证书安装
  16. oppo升级android,OPPO Real R807升级Android4.0教程
  17. 捷讯fw300r虚拟服务器口号,迅捷FW300R开启UPnP功能
  18. 游戏平台搭建韩国大带宽CN2服务器哪里的比较便宜
  19. 摄像头拍摄视频,保存视频,并将视频保存为图片
  20. JVM学习 -- JVM 性能调优监控工具 jps、jstack、jmap、jhat、jstat、hprof 使用详解

热门文章

  1. 2020-我的后端开发秋招之路
  2. 筹备两年,60万字诚意续作《腾讯游戏开发精粹Ⅱ》正式发布
  3. 《Java程序员职场全攻略:从小工到专家》连载九:散兵游勇还是团队作战
  4. 网络营销之怎样推广博客
  5. 5.5 tensorflow2实现多项式回归与神经网络、未来一个月购买量预测——python实战
  6. 34线性映射01——映射的概念和性质
  7. 什么是异构数据库?它和分布式数据库的联系是什么?
  8. Machine Learning - VII. Regularization规格化 (Week 3)
  9. Maximum Submatrix Largest Rectangle
  10. caffe 利用Python API做分类预测,以及特征的可视化