【数据库】外键的作用

article/2025/10/6 0:51:41

前言

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

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


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

学生表:

手机表:

学生有一个字段是手机id,而手机存在多个属性,那现在把手机单独建一张表。

这样如果那天想查所有手机号时,直接查这张表效率更高。此时的PhoneId就是学生表的外键。而且是手机表的主键。

这里的一个特点,一个表的外键,在另一个表中,必须为主键。所以外键通常就一个ID。这个ID关联起两张表。如果是一对一,做表联结也非常简单。


一对多(多对一)的关系

假设这个学校有三个学生,两个老师,每个学生只能选择一个老师

学生表:

老师表:

可以看到,学生12选择导师Song,这就是多个学生选择一个老师, 这个和一对一几乎没啥变化。也就是告诉你外键本身是可以重复的。

这样,又发现一个好处,多对一的情况下,相比建一个表,通过外键建两张表更节省空间。


多对多的关系

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

这就是多对多。

学生表:

教师表:

外键表:

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

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

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


约束

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

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


删除约束

学生表:

手机表:

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

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

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

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


更新约束

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


http://chatgpt.dhexx.cn/article/yJspmeLJ.shtml

相关文章

数据库之外键

外键约束(FOREIGN KEY)用来在两个表的数据之间建立连接,它可以是一列或者多列。一个表可以有一个或多个外键。 (1)外键定义:一张表中某一列的值使用的是另外一张表的主键值。这个列就被称为外键列。 &#…

数据库mysql表怎么设置外键_如何设置数据库中的外键

展开全部 创建数据库时就是有主键的创建了主键,但是表之间的关系没有联系,要建数据库关系图只e69da5e887aa62616964757a686964616f31333365653739有主键没有外键时不行的。 建外键的前提是此外键必须是另外一个表的主键。建外键的步骤: 第一步、打开要建外键表的设计器,右击…

数据库表外键设置

http://blog.csdn.net/pplsunny/article/details/7747340 我们在建立数据库的时候,需要为每张表指定一个主键,所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以唯一标…

数据库——外键的作用

我们用一个比较实际的例子来描述问题,并讲解外键作用: 当我们在网上购物的时候,我们有我们的帐号,还有我们所在不同地方的地址信息如公司,学校,家里,或者给亲戚朋友送个礼物,收货人…

mysql数据库添加外键的四种方式

文章目录 一、添加外键的四种方式二、文档下载 一、添加外键的四种方式 1、 建表时直接使用FOREIGN KEY,这种方式外键名称自动生成。如下图。 FOREIGN KEY (user_id) REFERENCES t_user(id)2、 建表时使用CONSTRAINT指定外键名称。如下图。 CONSTRAINT fk_studen…

彻底理解数据库外键

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

什么是数据库外键?

外键 Teacher_id就是student的外键 Teacher是主表,student是子表(从表) 外键就是一个表中的一个字段引用了另一个表中的主键,引用的表叫做子表,被引用的表叫做主表,外键是一种约束,描述的是表之…

数据库常用命令之外键(foreign key)多对多(总结,基础)

我是小白,刚接触MySQL不久,现阶段正在学习,为此在这里留下自己的学习笔记。如果有错误的地方还请大家见谅,评论或者私发我错误的地方哦,谢谢大家,嘿嘿~ 外键(foreign key) 引言&…

MySQL中的外键(foreign key)

阅读目录 前言一、外键作用及其限制条件1 外键的定义2 外键的作用3 外键创建限制 二、外键创建方法1 创建外键的语法2 举例(1)创建两张表(2)创建外键(3)查看表结构 三、验证外键作用1 先向主表中添加数据2 …

显示gsensor即时数据的apk 用gsensor来判断手机的静和动

即时显示gsensor的数据,可以在调试重力感应器驱动和测试手机性能时起到很好的作用。类似的,SensorEventListener还可以用在其他感应器的场合,比如光感应、地磁感应。这里用两种方式来完成读取并显示gsensor数据的功能,一种是activ…

老化测试Gsensor失败分析

在log中搜Gsensor可以看到如下: 在Y:\1\18045c1老化\bug127302c1_slog\last_log\2015-01-01-06-19-23\android\0-events-06-19-24.log中搜到如下: 行号 500 - 01-01 06:36:08.996 664 2050 I am_create_activity: [0,509924699,15,com.wingtech.runin…

MTK 9.0平台调试gsensor

MTK 9.0平台调试gsensor ----型号为:stk8baxx 1 查看原理图可以知道stk8baxx重力传感器 使用i2c1通道进行通讯,由于该重力传感器是不使用中断模式的进行触发的,所以不需要配置中断引脚。由此可以配置stk8baxx重力传感器的dts dts文件配置如…

APK无法识别gsensor问题剖析

APK无法识别gsensor问题的原因有很多,这里只是提供一条思路,解决现有项目遇到的问题。 1、确保驱动层可以工作。 2、打印LOGCAT数据,分析sensorservice流程 1、移植流程: 步骤:移植gsensor驱动,mc3413&am…

mtk平台gsensor,msensor方向确定方法

在gsensor和msensor驱动调试中,一个很重要的参数就是direction。 direction与芯片、layout和结构三者结合,才能最终确定该参数值。 mtk平台中该参数的示意图 在mtk10.0的kernel中提供了一个简单的调试接口,用于确认该参数值。 内核节点 /…

Gsensor驱动概述

本文以Bma250驱动为例子,详细介绍Gsensor设计的一个模板。 gsensor驱动在系统中的层次如下图所示: 图中包含三个部分:hardware,driver, input: n Hardware:其实我们可以认为Gsensor也是一个I2C设备。整个Gsens…

MTK平台Android Gsensor数据校准与数据获取

http://blog.csdn.net/morixinguan/article/details/76850600 上节,写WIFI MAC地址的时候我们已经知道,MTKAndroid系统的Gsensor校准的数据其实也是存储在NVRAM中的,Gsensor隶属于传感器系统架构。 接下来我们来看下Gsensor校准的基准图像: 那么如何来校准Gsensor的X,Y,Z三…

android g sensor,android gsensor 休眠震动唤醒功能怎么实现

一、唤醒源 设备休眠后,通过触发唤醒源使设备恢复正常工作模式。设备唤醒源有多种,对于Android设备常见的就有PowerKey、来电唤醒、Alarm唤醒等。 唤醒源的实现处于内核空间,本文重点讨论下PowerKey作为唤醒源的具体实现。 二、PowerKey唤醒源…

G-sensor 介绍

转自:http://blog.chinaunix.net/uid-29595319-id-4200772.html G-sensor G-sensor是加速度传感器,可以通过其来获得分别来自三个不同轴向上的加速度用以通知上层应用做出相应处理。 由于地球的引力作用,gsensor平放时,Z轴方向能…