IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 【数据库】彻底理解外键的作用 -> 正文阅读

[大数据]【数据库】彻底理解外键的作用

前言

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

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

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

学生表:

StudentIdNameAgePhoneId
1Daniel221
2Kitty212
3William223

?手机表:

PhoneIdPhoneNumberPhoneTypeCardType
1134…苹果联通
2135…华为联通
3139…小米移动

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

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

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

一对多(多对一)的关系

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

学生表:

StudentIDNameTeacherIDAge
1Daniel122
2Kitty121
3William222

导师表:

TeacherIDNameAge
1Song32
2Bean31

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

多对多的关系

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

这就是多对多。

学生表

StudentIDNameAge
1Daniel22
2Kitty21
3William22

教师表

TeacherIDNameAge
1Song32
2Bean31
3Code32

外键表

StudentIDTeacherID
12
33
32
31
13

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

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

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

约束

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

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

删除约束

学生表:

StudentIdNameAgePhoneId
1Daniel221
2Kitty212
3William223

?手机表:

PhoneIdPhoneNumberPhoneTypeCardType
1134…苹果联通
2135…华为联通
3139…小米移动

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

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

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

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

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

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

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

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

更新约束

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

总结

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

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 20:48:45  更:2022-10-08 20:49:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 -2025/4/22 11:20:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码