【MySQL入门指南】外键约束使用详解

这篇具有很好参考价值的文章主要介绍了【MySQL入门指南】外键约束使用详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、为什么需要外键?

 MySQL是一种关系型数据库,现实中的业务往往是相互关联的,这也就决定了数据库中的表也是存在相互关系的。而表与表之间的相互关系就是通过外键来维护的。给大家举一个现实的例子来帮助理解:

 现在我们需要在数据库中存放学生的选课信息。如果我们将课程具体信息全部设计在学生选课表后面,那就会出现大量的数据冗余:

【MySQL入门指南】外键约束使用详解

 所以我们不妨在学生选课表中只存放课程的id,课程的具体信息再由id从课程信息表中检索即可,也就是说,我们要建立 stu.course_idcourse.id 的映射关系。

【MySQL入门指南】外键约束使用详解

 至此,我们看似实现了“外键”,通过id建立了两张表的关系,但我们没有建立外键约束。怎么理解呢?

  • 管理员向stu表中插入数据时,由于误操作可能插入一个不存在的 course_id
  • C++课程突然从course数据表中被删除了,但stu表中还有选这门课的学生

 上面的两种情况都会导致错误关系的建立。也就是说,我们虽然看似实现了语义上的外键,但是两张表在本质上还是独立的。因此需要由MySQL来维护一种“强制的”,可靠的外键约束。

二、如何设置外键?
foreign key (字段名) references 主表()

 外键用于定义主表和从表之间的关系。外键约束主要定义在从表上,主表则必须是有主键约束或唯一键约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。在上面的案例中,stu表就属于从表,course表属于主表。

  • 创建主表

    mysql> create table course(
        -> id int primary key,
        -> name varchar(20) not null,
        -> time varchar(64) not null
        -> );
    Query OK, 0 rows affected (0.02 sec)
    
  • 创建从表

    mysql> create table stu(
        -> id int primary key,
        -> name varchar(10) not null,
        -> course_id int,
        -> foreign key(course_id) references course(id) -- 设置外键
        -> );
    Query OK, 0 rows affected (0.05 sec)
    
  • 正常插入数据

    mysql> insert into course values(11, 'C++', '9:00am');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> insert into stu values(100, '张三', 11);
    Query OK, 1 row affected (0.00 sec)
    
  • 插入的课程不存在。在外键约束下插入失败

    mysql> insert into stu values(101, '李四', 12);
    ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`db`.`stu`, CONSTRAINT `stu_ibfk_1` FOREIGN KEY (`course_id`) REFERENCES `course` (`id`))
    
  • 允许插入的值为NULL,表示还没有选课

    mysql> insert into stu values(101, '李四', NULL);
    Query OK, 1 row affected (0.00 sec)
    
  • 在外键约束下删除课程失败,因为还有学生选这门课程文章来源地址https://www.toymoban.com/news/detail-429139.html

    mysql> delete from course where id=11;
    ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`db`.`stu`, CONSTRAINT `stu_ibfk_1` FOREIGN KEY (`course_id`) REFERENCES `course` (`id`))
    

到了这里,关于【MySQL入门指南】外键约束使用详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Ajax超详解(新手入门指南)

    Ajax超详解(新手入门指南)

    AJAX:全称是 Asynchronous JavaScript And XML ,即异步的JavaScript和XML。AJAX是用于前后端交互的工具,也就是说通过AJAX作为桥梁,客户端可以给服务端发送消息,也可以接收服务端的响应消息。 AJAX的两种实现方式: XHR :使用XMLHttpRequest对象来实现AJAX Fetch :使用Fetch API来实现AJAX X

    2023年04月25日
    浏览(17)
  • MySQL的多表操作-外键约束

    MySQL的多表操作-外键约束

    介绍 MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。 如下图员工表中dept_id 表示员工属于哪个部门,员工表就是从表,部门表就是

    2024年02月07日
    浏览(6)
  • MySQL主从复制入门指南:基础概念和配置步骤

    MySQL主从复制入门指南:基础概念和配置步骤

    为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。 (博客的参考源码可以在我主页的资源里找到,如果在学习的

    2024年02月14日
    浏览(7)
  • 「HTML和CSS入门指南」label 详解

            在 HTML 中, label 标签用于定义表单元素的标签。使用 label 标签可以帮助您提高表单的可访问性,并使用户更易于理解和使用表单。 以下是 label 标签的基本语法: 其中: for  属性指定与哪个表单元素相关联。 input  元素的  id  属性必须与  for  属性的值相同,

    2024年02月07日
    浏览(6)
  • MySQL外键约束和多表查询

    MySQL外键约束和多表查询

    知识点 示例 知识点 示例 准备数据 示例 知识点 示例 知识点 示例

    2024年02月04日
    浏览(11)
  • MySQL入门指南:数据库操作的基础知识

    MySQL入门指南:数据库操作的基础知识

    当谈到关系型数据库管理系统(RDBMS)时,MySQL无疑是最常见和广泛使用的一个。它是一个强大的工具,用于存储、管理和检索数据。在这篇博客中,我们将介绍MySQL的基本知识,包括数据库的操作、数据表的操作以及数据的增删改查~~ 目录 1. 数据库的操作 1.1 创建数据库 1.2 删除

    2024年02月07日
    浏览(10)
  • 「HTML和CSS入门指南」video 标签详解

            在 HTML 中, video 标签用于向网页添加视频。它是一个独立的标签,没有结束标记,并且可以设置多种属性来控制视频播放器的行为和外观。使用 video 标签可以帮助您更好地展示您的内容,提高用户体验并且能够在不同设备和平台上播放视频。 以下是 video 标签的

    2024年02月08日
    浏览(10)
  • 「HTML和CSS入门指南」aside 标签详解

            在 HTML 中, aside 标签用于表示与页面或文章内容相关,但又不属于主要内容的侧边栏、导航区域、广告、标注等内容。通常用于包含附加信息、引用和其他次要元素。 以下是 aside 标签的基本语法: 请注意, aside 标签必须闭合,并且任何文本都应该放置在起始和

    2024年02月08日
    浏览(7)
  • 「HTML和CSS入门指南」th 标签详解

            在 HTML 中, th 标签用于创建表格中的表头单元格。表头单元格通常用于标识每列中的数据,并且与普通单元格不同之处在于它们具有更强的语义含义。 以下是 th 标签的基本语法: 其中: table  标签用于创建表格。 thead  标签用于标识表格的表头部分。 tr  标签

    2024年02月08日
    浏览(9)
  • MySQL--删除表的外键约束,简单易懂。

    MySQL--删除表的外键约束,简单易懂。

    删除表的外键约束 我们曾在第一章中讲过外键的作用,以及如何创建一个表的外键。建立了外键我们就建立起了两张表的关联关系,那如果我想删除主表呢?为了确保数据库的正确性,我们必须先解除两个表之间的关联关系,那就是删除外键约束啦!让我们先来看看删除外键

    2024年04月17日
    浏览(5)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包