MySQL  外键(foreign key)约束的作用和使用

 更新时间:2023年09月26日 10:00:11   作者:永远是少年啊  
外键约束是用于建立两个表之间关系的一种约束,本文主要介绍了MySQL外键约束详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

什么是外键约束?

外键:用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。

外键约束是用于建立两个表之间关系的一种约束,它定义了一个表中的列与另一个表中的列之间的关系。外键约束可以保证数据的完整性和一致性,确保表与表之间的关系得到正确维护

外键约束的使用方法

基本语法:

-- 创建表时添加外键
create table 表名(
字段名 数据类型,
...
[constraint] [外键名称] foreign key (外键字段名) references 主表 (主表列名)
);
-- 单独添加外键
alter table 表名 add constraint 外键名称 foreign key (外键字段名)
references 主表 (主表列名) ;
-- 删除外键
alter table 表名 drop foreign key 外键名称;

外键产生的行为(删除/更新行为)

添加了外键之后,再删除父表数据时产生的约束行为,我们就称为删除/更新行为。具体的删除/更新行为有以下几种:

行为说明
no action当在父表(主表)中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。 (与 RESTRICT 一致) 默认行为
restrict当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不
允许删除/更新。 (与 NO ACTION 一致) 默认行为
cascade当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则
也删除/更新外键在子表中的记录。
set null当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表
中该外键值为null(这就要求该外键允许取null)。
set default父表有变更时,子表将外键列设置成一个默认的值 (Innodb不支持)

可以添加行为:

-- 设置update和delete为cascade行为
alter table 表名 add constraint 外键名称 foreign key (外键字段) references 
主表名 (主表字段名) on update cascade on delete cascade;

实例介绍

假设有两个表: students (学生表)和 courses (课程表)。每个学生可以选择多门课程,因此我们希望通过外键约束来确保学生表中的 course_id 列与课程表中的 course_id 列保持一致。

1. 数据完整性:通过外键约束,我们可以确保学生表中的 course_id 列只引用了课程表中存在的有效 course_id 值。这样可以防止无效的或不存在的课程ID被插入到学生表中,保证数据的完整性。

2. 数据一致性:外键约束可以确保学生表中的 course_id 列与课程表中的 course_id 列保持一致。如果在课程表中更新或删除了某门课程的记录,外键约束会自动处理相关的学生表中的数据,以保持数据的一致性。

3. 数据查询和关联:使用外键约束可以简化数据查询和关联操作。通过外键关联,我们可以轻松地从学生表中获取与特定课程相关的学生信息,或者从课程表中获取与特定学生相关的课程信息。

注意事项

1. 外键约束只能在InnoDB存储引擎下使用,因此需要确保表使用的是InnoDB引擎。

2. 外键列和主键列的数据类型和长度必须相同,否则无法建立外键约束。

3. 当删除或更新主表中的数据时,需要谨慎选择ON DELETE和ON UPDATE子句,以确保从表中的数据处理方式符合业务需求。

4. 外键约束可能会影响数据库的性能,特别是在大量数据插入或更新时。因此,在设计数据库时,需要权衡使用外键约束的必要性和性能影响。

到此这篇关于MySQL  外键(foreign key)约束的作用和使用的文章就介绍到这了,更多相关Mysql外键约束内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅析使用JDBC操作MySQL需要添加Class.forName(

    浅析使用JDBC操作MySQL需要添加Class.forName("com.mysql.jdbc.Driver")

    这篇文章主要介绍了使用JDBC操作MySQL需要添加Class.forName("com.mysql.jdbc.Driver")的相关知识,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-04-04
  • 基于JPQL实现纯SQL语句方法详解

    基于JPQL实现纯SQL语句方法详解

    这篇文章主要介绍了基于JPQL实现纯SQL语句方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 2017最新版windows安装mysql教程

    2017最新版windows安装mysql教程

    这篇文章主要介绍了2017最新版windows安装mysql教程,本文图文并茂给大家介绍的非常详细,需要的朋友可以参考下
    2017-08-08
  • MySQL的Data_ADD函数与日期格式化函数说明

    MySQL的Data_ADD函数与日期格式化函数说明

    今天看到了MySQL的日期函数,里面很多有用的,这里只把两个参数不太好记的粘下来了。
    2010-06-06
  • mysql select语句操作实例

    mysql select语句操作实例

    这篇文章主要介绍了mysql select语句操作实例,本文给出了ORDER BY查询、GROUP BY查询、LIMIT查询、UNION等语句的实例,需要的朋友可以参考下
    2014-12-12
  • Window下Mysql忘记root密码怎么重置

    Window下Mysql忘记root密码怎么重置

    这篇文章主要介绍了Window下Mysql忘记root密码的重置方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • MySQL根据某一个或者多个字段查找重复数据的sql语句

    MySQL根据某一个或者多个字段查找重复数据的sql语句

    这篇文章主要介绍了MySQL根据某一个或者多个字段查找重复数据的sql语句,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-12-12
  • 详解MySQL数据库优化的八种方式(经典必看)

    详解MySQL数据库优化的八种方式(经典必看)

    关于数据库优化,网上有不少资料和方法,但是不少质量参差不齐,有些总结的不够到位,内容冗杂。今天给大家分享一篇文章关于mysql数据库优化的八种方式,非常经典,需要的的朋友参考下
    2017-03-03
  • Ubuntu下MySQL安装及配置远程登录教程

    Ubuntu下MySQL安装及配置远程登录教程

    这篇文章主要为大家详细介绍了Ubuntu下MySQL安装及配置远程登录教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • MySQL慢查询如何定位详解

    MySQL慢查询如何定位详解

    这篇文章主要给大家介绍了关于MySQL慢查询如何定位的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11

最新评论