• 技术文章 >数据库 >mysql教程

    MySQL外键约束知识点总结

    长期闲置长期闲置2022-07-12 20:37:32转载115
    本篇文章给大家带来了关于mysql的相关知识,其中主要整理了外键约束的相关问题,外键约束(Foreign Key)即数据库中两个数据表之间的某个列建立的一种联系,这种联系通常是以实际场景中含义完全相同的字段所造成的,下面一起来看一下,希望对大家有帮助。

    推荐学习: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视频教程

    以上就是MySQL外键约束知识点总结的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:CSDN,如有侵犯,请联系admin@php.cn删除
    专题推荐:mysql
    上一篇:浅析mysql设置最大连接数的两种方法 下一篇:实例详解MySQL数据库视图
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• MySQL怎么解决delete大量数据后空间不释放的问题• 深入解析MySQL中的查询优化器(工作原理详解)• 实例详解MySQL占用内存过大解决方法• MySQL5.7.31如何安装和配置?(保姆级教程分享)• MySQL数据库JDBC编程知识点总结
    1/1

    PHP中文网