前言

说到外键,一般就会牵扯出约束。不谈约束的话,起始外键就是一个普通的字段(Column),起到一个关联的作用。

先把约束放一边,我们看看外键有哪些作用。

建立表中记录的一对一的关系

学生表:

StudentId Name Age PhoneId
1 Daniel 22 1
2 Kitty 21 2
3 William 22 3

手机表:

PhoneId PhoneNumber PhoneType CardType
1 134… 苹果 联通
2 135… 华为 联通
3 139… 小米 移动

现在学生有一个字段是手机,而手机存在多个属性,那现在我想把手机单独建一张表。这样如果我那天像查所以手机号的时候,直接查这张表效率更高。此时的PhoneId就是学生表的外键。而且是手机表的主键。

这里我们也发现一个特点,一个表的外键,在另一个表中,必须为主键。所以外键通常就是一个

ID。这个ID关联起两张表。那如果是一对一,做表联结也是非常简单的。

一对多(多对一)的关系

假设这个学校有三个学生,两个老师,每个学生只能选择一个人作为自己的导师

学生表:

StudentID Name TeacherID Age
1 Daniel 1 22
2 Kitty 1 21
3 William 2 22

导师表:

TeacherID Name Age
1 Song 32
2 Bean 31

这里及可以看到,学生12选择了导师Song,这就是多个学生选择了一个老师, 这个和一对一几乎没啥变化。也就是告诉你外键本身是可以重复的。这样,你又发现一个好处,多对一的情况下,相比建一个表,通过外键建两张表更节省空间。

多对多的关系

但是,如果学生可以选择多个老师呢? 学生可以选择多个老师,老师也可以拥有多个学生。

这就是多对多。

学生表

StudentID Name Age
1 Daniel 22
2 Kitty 21
3 William 22

教师表

TeacherID Name Age
1 Song 32
2 Bean 31
3 Code 32

外键表

StudentID TeacherID
1 2
3 3
3 2
3 1
1 3

我们发现,多对对的情况下,学生表和教师表,都已经不存在外键了。外键存在于另外一张中间表,我就称之为外键表吧(当然这张表也有主键,这里为了关注重点,我省略了)

通过这个外键表,我们可以清晰的看出,学生1拥有两个老师(2,3),学生3有三个老师(1,2,3)

而老师2,有两个学生(1,3),老师3有两个学生(3,1)

约束

更能体现外键的作用是约束,这种约束,其实是定义好的规则,简化我们对数据库操作。就是某些操作在定义好的约束后,自动帮你完成!这就是定义外键的另一个好处。

约束分为删除和更新。删除用的是比较多的。

删除约束

学生表:

StudentId Name Age PhoneId
1 Daniel 22 1
2 Kitty 21 2
3 William 22 3

手机表:

PhoneId PhoneNumber PhoneType CardType
1 134… 苹果 联通
2 135… 华为 联通
3 139… 小米 移动

还是拿这个一对一的举例,我们通常将拥有外键的表称之为子表,这里学生表就是子表,手机表就是学生表的主表。 删除约束,就是当主表中的某条记录被删除的时候,子表中对应的记录如何处理?

方式1:当主表中的某条记录被删除时,对应的子表中的记录中的外键自动置为Null。

就好比,PhoneId为1的手机被老师给没收了,处理了(主表记录被删除)。与之相关联的学生Daniel就不再拥有该手机了(子表中的记录中的外键置为Null)

方式2 :当主表中的某条记录被删除时,对应的子表中的元素自动也删除。

就好比,PhoneId为1的手机被老师给没收了,处理了(主表记录被删除)。与之相关联的学生Daniel觉得生无可恋也投河自尽了(子表记录对应删除)。

方式3 : 当主表中的某条记录被删除时,如果子表有记录关联到该主表记录,此时会到时删除报错。

就好比,老师没收手机之前,先要确定学生是不是也已经放弃这个手机了,只有在老师说服学生放弃该手机之后,再没收,避免事故的发生。

(例子主要方便大家加强记忆,不要当真。手动狗头)

更新约束

这个情况发生的较少,就是当手机表中的PhoneId发生更改时,学生表中的PhoneId也会随之自动变化。

总结

这篇文章主要是从大的角度理解外键的作用,至于约束是如何通过sql去建立的,请另行找资料学习。请各位看官多多支持,关注一波。感谢。

【数据库】彻底理解外键的作用相关推荐

  1. mysql数据库如何添加外键约束_MySQL数据库之外键约束的简单理解

    定义 如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键.由此可见,外键表示了两个关系之间的相关联系.以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的 ...

  2. 数据库之SQL的主键和外键的作用

    SQL的主键和外键约束 SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主 ...

  3. MySQL数据库SQL的主键和外键的作用

    SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...

  4. 数据库中主外键概念详细介绍

    关于数据库的主外键设置问题 一.主外键概念 主键 ​ 1.主键 ​ 简单而言,能够唯一的表示表中的每一行数据,这样的列属性称为表的主键,使用表主键可以保证实体的完整性,可对表内数据进行修改.删除时使用 ...

  5. 如何在MySQL中设置外键约束以及外键的作用

    1.外键的作用,主要有两个:     一个是让数据库自己通过外键来保证数据的完整性和一致性     一个就是能够增加ER图的可读性 2.外键的配置 1)先创建一个主表,代码如下: #创建表studen ...

  6. 什么是外键,外键的作用

    什么是外键: 如果一个实体的某个字段指向另一个实体的主键,就称为外键.被指向的实体,称之为主实体(主表),也叫父实体(父表).负责指向的实体,称之为从实体(从表),也叫子实体(子表) 外键的作用: ① ...

  7. mysql外键约束的作用_如何在MySQL中设置外键约束以及外键的作用

    1.外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 2.外键的配置 1)先创建一个主表,代码如下: #创建表student,并添加各种约 ...

  8. 【数据库演练】外键SQL语句的编写分组和聚合函数的组合使用

    外键SQL语句的编写 外键SQL语句的编写 1. 外键约束作用 2. 对于已经存在的字段添加外键约束 3. 在创建数据表时设置外键约束 4. 删除外键约束 5. 小结 演练-分组和聚合函数的组合使用 ...

  9. mysql sql外键的作用_SQL的主键和外键的作用

    QL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外键 ...

最新文章

  1. uva 1614奇怪的股市(归纳法证明,贪心)
  2. graph theory important questions
  3. 图片和input不对齐_pdf到png再到mp4短视频:不需要工具,2个指令1键搞定
  4. Google 是如何成为巨头的?
  5. 解决VsCode下载慢问题
  6. 优先队列push pop操作
  7. safari看html5卡顿,MacOS下Safari 10浏览器卡顿解决方案整理 - YangJunwei
  8. 爬虫笔记——东方财富科创板数据爬取(selenium方法)
  9. 关于tv app的一些想法
  10. html给标题设置背景,怎么在html中设置一级标题背景
  11. 基于Hexo搭建Next主题博客
  12. PR CC2019启动出现crash桌面文件
  13. 论文复刻:排污权机制是否提高了企业全要素生产率(附代码、数据、原文献)
  14. mysql8(解压包)安装配置教程
  15. 计算机软件著作权用户手册资料,请问一下计算机软件著作权登记里的使用手册有没有什么要求,可以是大量图片加少量文字吗?我只写了20页- 法律快车法律咨询...
  16. 2019阿里校招测评——光明小学接力赛(Java)
  17. 扒一扒最让人后悔的专业 ,你躺枪了吗?
  18. springboot毕设项目面向大学校园的设备保修系统cavpj(java+VUE+Mybatis+Maven+Mysql)
  19. 公共计算机房电气设计规范,23.2 机房的选址、设计与设备布置
  20. 2022-06-28 Nginx connect() to xxx.xx.xx.xxx:xxxxx failed (13: Permission denied)

热门文章

  1. Java生成各种随机数的工具类
  2. 熬之滴水穿石:Servlet--Web万物之源(1)
  3. 谷歌地球Google Earth Pro 7.3.3.7721 mac中文版
  4. 关于canvas画图,填充颜色,添加文字
  5. 职场必备, Word技巧大全
  6. pdfh5使用及不显示pdf文件原因
  7. 编写Java程序,将文本文件(附件提供有example.txt)的内容以“行”为单位进行倒序排列,运行效果见下图所示。
  8. mock.js详细用法
  9. 流量来源分析 0801 0810 0820 流量数据重跑
  10. OOM异常的发生原因