数据库的外键:主表与从表

article/2025/10/6 0:47:21

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • Mysql的外键是什么,有何用?
  • 代码演示
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:
最近在学习数据库,涉及到主表与从表的时候很懵逼,有点无法理顺,看了一些视频和博客结合自己的理解,写了这篇博客,以此记录。如果有错的地方,可以留言纠正,感谢。


Mysql的外键是什么,有何用?

定义:如果一个A表的字段指向B表的主键,则此字段就位A表的外键。用于表示表之间的关系。存在外键的表,称之为从表,外键指向的表,称之为主表。
作用:保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值或使用空值。
刚看有点抽象但结合例子就很好理解了。

编程的角度考虑,无外乎是为了让数据更加简洁明了,方便查找与使用管理。
先看看一张学生的综合数据表(表1):
在这里插入图片描述
很全面,既包含学生的个人信息,也包好学生的成绩。但如果增加了奖学金信息,学生的疫苗接种情况,这种表使用和查找起来还方便吗?
为此,我们将上述表进行拆分,得到如下表
学生信息表
在这里插入图片描述
分数表
在这里插入图片描述
通过学生表(主表),可以将学生的各类信息表(从表)链接起来,这样就能很好的实现表的数据一致性和完整性。通过字段id实现了两个表的关联。其中id就是分数表(从表)的外键。

外键的由来:
假设不构建外键,在我们的观点中,上述两个表是通过id联系在一起的,但计算机无法是别。为了能够使计算机识别,我们提出了外键的概念,这样就能更好的理解外键了吧。
这时候我们在来对外键使用特征进行小总结:
1、以公共关键字作主键的表为主键表(公共关键字也可以作为从表的主键)
2、以公共关键字作外键的表为外键表

注意事项:
1.从表的字段必须与外键类型同样(公共关键字,如上id)
2. 外键必须是主表的唯一键(学生表 id 是主键,而主键是唯一的。所以能够作为分数表 的外键)
3. 避免使用复合键(也就是说从表能够同一时候引用多个外表的字段作为一个外键,一般不推荐这样的做法)
这里的关联部分结合代码会更好理解。

以下操作皆是物理外键,数据库级别的外键,不建议使用–删除必须先删除从表,刚接触写了代码加深了解,这类代码以后基本用不到。

最佳实践:
1.数据库就是单纯的表,只用来存数据,只有行(数据)与列(字段)
2. 使用多张表的数据,需要外键(程序去实现)

代码演示

代码如下(示例):
综合表的创建

综合数据表
CREATE TABLE `student1` (`id` int(4) NOT NULL AUTO_INCREMENT COMMENT '学号',`name` varchar(10) NOT NULL DEFAULT '匿名' COMMENT '姓名',`sex` varchar(2) NOT NULL DEFAULT '男' COMMENT '性别',`birthday` datetime DEFAULT NULL COMMENT '出生日期',`nation` varchar(50) DEFAULT '汉' COMMENT '民族',`address` varchar(100) DEFAULT NULL COMMENT '家庭住址',`语文` int(3) NOT NULL DEFAULT '0' COMMENT '语文分数',`数学` int(3) NOT NULL DEFAULT '0' COMMENT '数学分数',`英语` int(3) NOT NULL DEFAULT '0' COMMENT '英语分数',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

为了保持数据的一致性与完整性,我们将表分为两个:

学生信息表
CREATE TABLE `student` (`id` int(4) NOT NULL AUTO_INCREMENT COMMENT '学号',`name` varchar(10) NOT NULL DEFAULT '匿名' COMMENT '姓名',`sex` varchar(2) NOT NULL DEFAULT '男' COMMENT '性别',`birthday` datetime DEFAULT NULL COMMENT '出生日期',`nation` varchar(50) DEFAULT '汉' COMMENT '民族',`address` varchar(100) DEFAULT NULL COMMENT '家庭住址',PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8

分数表

CREATE TABLE IF NOT EXISTS score(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`语文` INT(3) NOT NULL DEFAULT '0' COMMENT '语文分数',
`数学` INT(3) NOT NULL DEFAULT '0' COMMENT '数学分数',
`英语` INT(3) NOT NULL DEFAULT '0' COMMENT '英语分数',
PRIMARY KEY(`id`),
KEY `FK_id` (`id`),
CONSTRAINT `FK_id` FOREIGN KEY (`id`) REFERENCES `student`(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

从表关联主表代码

方式一:在从表中加外键
CREATE TABLE IF NOT EXISTS score(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`语文` INT(3) NOT NULL DEFAULT '0' COMMENT '语文分数',
`数学` INT(3) NOT NULL DEFAULT '0' COMMENT '数学分数',
`英语` INT(3) NOT NULL DEFAULT '0' COMMENT '英语分数',
PRIMARY KEY(`id`),
KEY `FK_id` (`id`),
CONSTRAINT `FK_id` FOREIGN KEY (`id`) REFERENCES `student`(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
方式二:单独建好主表和从表后,利用如下代码即可:
ALTER TABLE `score` ADD CONSTRAINT `FK_id` FOREIGN KEY(`id`) REFERENCES `student`(`id`);

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:
理解之后并不难,希望大家多多交流,如果有错误请指出。


http://chatgpt.dhexx.cn/article/91TSWFxT.shtml

相关文章

【数据库】外键的作用

前言 说到外键,一般就会牵扯出约束。不谈约束,起始外键就是一个普通的字段(Column),起到一个关联的作用。 先把约束放一边,看看外键有哪些作用。 建立表中记录的一对一的关系 学生表: 手机表…

数据库之外键

外键约束(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唤醒源…