复习数据库(外键约束)下篇

目录

前言

认识外键

外键的特点

外键的设计方式

多对多

组合主键

一对多/多对一

一对一

外键和外键约束的关系

外键的使用

添加约束

在建表时添加外键约束

如果已经创建表了,那我们可以修改表的方式给表添加外键约束:

应用实例

删除约束

删除/更新行为

含义

我们就称为删除/更新行为。具体的删除/更新行为有以下几种:

语法

理解


前言

本篇博客旨在帮助大家理解:外键的含义和外键的具体应用

认识外键

在现实生活中,一个公司有很多部门,一个部门又有很多职员。如果我们从学习数据库的知识来描述这种关系,我们是不是要创建两张表: 1 部门表 dept  2 员工表 emp。

部门表 dept有 部门id ,名字,类型 等字段 ,员工表 emp 有  员工id , 员工名字,工作,年龄,薪资 等字段

现在有个问题了,应该怎么描述他们之间的关系呢?-一个部门有多个员工

就需要在员工表在添加一个字段dept_id,表示该员工所在的部门id

在这里,认为添加的员工表的dept_id 字段 ,描述了员工表和部门表关系。是在一个emp表中引用dept表的主键,以建立两个表之间的关系。称为外键【指向部门表的主键】

外键的特点

  • 如果两张表存在关联关系如:员工表 emp表和部门表dept 表 。
  • 员工表的外键dept_id 是相对于部门表 dept 来说的,并且外键的对应的是dept表的主键

外键的设计方式

  1. 多对多
  2.  一对多/多对一
  3.  一对一

多对多

应用场景

在学校一个老师教多个学生,一个学生需要学习多门课:tb_teacher表和tb_stu表。

思路

这种情况需要中间表来处理多对多的关系

设计中间表 tb_teacher_stu表 其中新建的表中会有两个外键,一个相对于tb_teacher 表的外键;另一个相对于tb_stu表的外键。

注意:这两个外键都是对应另一方的主键

组合主键

含义

组合主键(Composite Primary Key),也称为复合主键,是指由两个或多个列共同组成的主键。这些列的组合值必须唯一地标识表中的每一条记录

应用场景

员工表employee 和职务表 job 一个员工可以有多个职业,一个职业也存在多个员工。这就是多对多的关系。在上面提到 多对多的关系,我们需要建立中间表。那么一个表都应该有一个主键

但这时候,我们就发现,你加在任何一个字段都不合适。只有两个字段都添加才可以,这里就是用了组合主键

特点

只有两个都相等时,才违背主键约束,如果只是任何一个相等,并不会违背主键约束

创建中间表代码如下

create table tb_employee_job(eid int,job_id int ,
#     使用组合主键primary key (eid,job_id))

一对多/多对一

应用场景

订单和顾客 : Orders 表(订单表)和 Customers 表(客户表)

思路

一个客户有多个订单,,但一个订单只有一个客户在这里 : Orders 表(订单表)为子表

 Customers 表(客户表)为父表

  1. 外键在“多”的一方

    • 在一对多关系中,外键位于“多”的表中,即子表。这个外键指向“一”的表(父表)的主键。
    • 例如,在Orders 表Customers 表的关系中,如果一个顾客Customers 表可以拥有多份订单 ,那么外键应该在Orders 表中,指向Customers 表的主键。
  2. 外键不在“一”的一方

    • 外键不会出现在“一”的表中,即父表。父表只有主键,没有外键。
    • 继续上面的例子,Customers 表不会有指向Orders 表的外键,因为Customers 表是“一”的一方。

一对一

应用场景

身份证和人的关系:Card 表(身份证表) 和 Person 表(个人表)

思路

一个人只有一张身份证,一个身份证,同时也只对应一个人

外键在任意一方都可以。在Card 表 指向Person 表的主键;在Person 表 表示指向Card 表 的主键

外键和外键约束的关系

外键约束,既是外键的一种保护措施为了防止恶意删除数据,又是确保数据库中数据的引用完整性和一致性。

外键的使用

添加约束

在建表时添加外键约束

语法

CREATE TABLE 表名 (字段名 数据类型,...[ CONSTRAINT ] [ 外键名称 ] FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名)
);

如果已经创建表了,那我们可以修改表的方式给表添加外键约束:

语法

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名) ;
应用实例

部门表dept 表 员工表 emp表 ,删除部门表id=1 的部门信息

// 创建部门表dept
CREATE TABLE dept (id INT AUTO_INCREMENT COMMENT 'ID' PRIMARY KEY,NAME VARCHAR (50) NOT NULL COMMENT '部门名称'
) COMMENT '部门表' ;
// 插入数据
INSERT INTO dept (id, NAME)
VALUES(1, '研发部'),(2, '市场部'),(3, '财务部'),(4, '销售部'),(5, '总经办');
//创建员工表
CREATE TABLE emp (id INT AUTO_INCREMENT COMMENT 'ID' PRIMARY KEY,NAME VARCHAR (50) NOT NULL COMMENT '姓名',age INT COMMENT '年龄',job VARCHAR (20) COMMENT '职位',salary INT COMMENT '薪资',entrydate DATE COMMENT '入职时间',managerid INT COMMENT '直属领导ID',dept_id INT COMMENT '部门ID'
) COMMENT '员工表' ;
// 插入数据
INSERT INTO emp
VALUES(1, '金庸',66,'总裁',20000,'2000-01-01',NULL,5),(2,'张无忌',20,'项目经理',12500,'2005-12-05', 1,1),(3,'杨逍',33,'开发',8400,'2000-11-03',2,1),(4,'韦一笑',48,'开发',11000,'2002-02-05',2,1),(5, '常遇春',43,'开发',10500,'2004-09-07',3,1),(6,'小昭',19,'程序员鼓励师',6600,'2004-10-12',2,1) ;
//在员工表emp表中,添加外键
alter table emp add foreign key (dept_id) references dept(id);
// 删除部门表 id=1 的部门信息
delete  from dept where id=1;

运行结果

报错的原因:外键约束阻止了,你删除部门表id =1 的信息,并且与它相关联的员工表的信息

删除约束

语法

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

删除/更新行为

含义

添加了外键之后,再删除父表数据时产生的约束行为,我们就称为删除/更新行为。

在数据库中,我们默认 NO ACTION/RESTRICT

我们就称为删除/更新行为。具体的删除/更新行为有以下几种:

行为说明
NO ACTION当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。 (与 RESTRICT 一致) 默认行为
RESTRICT当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。 (与 NO ACTION 一致) 默认行为
CASCADE当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录。
SET NULL当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(这就要求该外键允许取null)
SET DEFAULT父表有变更时,子表将外键列设置成一个默认的值 (Innodb不支持)

语法

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主表名 (主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;

理解

在上面我说了数据库中,默认使用 NO ACTION/RESTRICT

 NO ACTION/RESTRICT 理解

如果在父表中删除数据,判断在子表是否有对应的外键(删除的数据,是否在子表中有关联的),如果有则不允许删除、更新

CASCADE 理解

和 NO ACTION/RESTRICT 刚好相反。你在父表中删除的数据,判断外键所在的表是否有与之关联的数据,如果有则删除,更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/4804.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

深入理解 Kafka:分布式消息队列的强大力量

一、引言 在现代分布式系统中,消息队列扮演着至关重要的角色,而 Kafka 作为其中的佼佼者,以其高吞吐量、可扩展性和持久性等特点被广泛应用。无论是处理海量的日志数据、实时的用户交互信息,还是复杂的微服务间通信,Ka…

Jekins篇(搭建/安装/配置)

目录 一、环境准备 1. Jenkins安装和持续集成环境配置 2. 服务器列表 3. 安装环境 Jekins 环境 4. JDK 环境 5. Maven环境 6. Git环境 方法一:yum安装 二、JenKins 安装 1. JenKins 访问 2. jenkins 初始化配置 三、Jenkins 配置 1. 镜像配置 四、Mave…

mmpose框架进行人体姿态识别模型HRNet训练

进行训练之前要先进行标注及数据增强,标注工具写在另一篇,首先讲数据增强。 数据增强 进行简单的色彩变换和位置变换,代码如下: from PIL import Image, ImageEnhance import numpy as np import os import glob import json im…

Dinky中配置Flink集群

需要启动yarn-session 进程,在集群服务器 cd /pwd//flink/bin yarn-session -d 启动成功后可以在yarn的资源管理队列进行查看 启动成功后会给出:JobManager Web Interface 在dinky中进行配置: 集群配置 Hadoop 配置: H…

Android13 系统/用户证书安装相关分析总结(三) 增加安装系统证书的接口遇到的问题和坑

一、前言 接上回说到,修改了程序,增加了接口,却不知道有没有什么问题,于是心怀忐忑等了几天。果然过了几天,应用那边的小伙伴报过来了问题。用户证书安装没有问题,系统证书(新增的接口)还是出现了问题。调…

hashcat爆破rar密码

背景: 在一道CTF题目的时候遇到了一个rar加密压缩包,记录一下爆破过程。 过程: 1、在前一个压缩包里面发现密码提示 2、file查看文件类型,发现是RAR v5,无法使用ARCHPR爆破,排除; 3、使用Pa…

构建多维分类知识库:Spring Boot实战

1 绪论 1.1 研究背景 在这个推荐个性化的时代,采用新技术开发一个多维分类的知识管理系统来分享和展示内容是一个永恒不变的需求。本次设计的多维分类的知识管理系统有管理员和用户两个角色。 管理员可以管理用户信息,知识分类,知识信息等&am…

深度学习实战100-大模型LLM之混合专家模型MoE的原理,以及代码实现过程

大家好,我是微学AI,今天给大家介绍一下深度学习实战100-大模型LLM之混合专家模型MoE的原理,以及代码实现过程。 混合专家模型(Mixture of Experts, MoE)是一种创新性的神经网络架构,巧妙地结合了 问题分类 和 领域专家 的概念。在这种架构中,输入数据首先经过一个门控网络…

AI + 绘画 | 100个可变现的渠道、方式

商机:AI绘画技术在美发⾏业的应⽤,旨在降低视频和图⽂制作成本,提升服务展⽰效果。通过AI技术,可以轻松展⽰发型设计前后对⽐,解决顾客与发型师之间的沟通难题。 变现: 1.⽣产图⽂内容或教程,…

[vulnhub]Empire: Breakout

https://www.vulnhub.com/entry/empire-breakout,751/ 端口扫描主机发现 探测存活主机,183是靶机 nmap -sP 192.168.75.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-05 23:37 CST Nmap scan report for 192.168.75.1 Host is up (0.00045s latency…

精益生产管理培训对哪些岗位的人更有帮助?

精益生产管理培训作为一种提升企业运营效率和管理水平的有效手段,在现代企业中扮演着至关重要的角色。它不仅能够帮助企业减少浪费、优化流程,还能增强员工的责任感和团队协作能力。那么,精益生产管理培训对哪些岗位的人更有帮助呢&#xff1…

OpenCV的操作

1.图像的基本操作 1.1读取图像 image_handler cv2.imread(image_path, cv2.IMREAD_COLOR) 第一个参数图片的存储路径,第二个参数是图像的读取方式 第二个参数有三个选项: cv2.IMREAD_UNCHANGED:保持原格式不变,-1;cv2.IMREA…

数据结构之单链表

前言:上一篇文章我们了解到顺序表,这一次来看另一种线性表-------单链表。 1. 单链表的概念 单链表,想必很多人会感到陌生吧。那么,到底什么是单链表呢?先了解清楚单链表的概念及特性,才能够更好的实现单…

RabbitMQ死信队列

RabbitMQ死信队列 1、RabbitMQ死信队列2、代码示例2.1、队列过期2.1.1、配置类RabbitConfig(关键代码)2.1.2、业务类MessageService2.1.3、配置文件application.yml2.1.4、启动类2.1.5、配置文件2.1.6、测试 2.2、消息过期2.2.1、配置类RabbitConfig2.2.…

高亚科技签约酸动力,助力研发管理数字化升级

近日,中国企业管理软件资深服务商高亚科技与广东酸动力生物科技有限公司(以下简称“酸动力”)正式签署合作协议。借助高亚科技的8Manage PM项目管理软件,酸动力将进一步优化项目过程跟踪与节点监控,提升研发成果的高效…

Linux操作系统:学习进程_对进程的深入了解

目录 前言 开篇 一、进程概念 二、进程的描述与管理 1、如何描述与管理 2、Linux中的PCB-task_struct 3、对进程组织的理解 三、进程的属性 1、系统创建进程 2、查看进程 3、进程的标识符 4、退出进程 1>ctrlc 2>kill命令杀死进程 5、用户进程的创建方式…

大客户营销数字销售实战讲师培训讲师唐兴通专家人工智能大模型销售客户开发AI大数据挑战式销售顾问式销售专业销售向高层销售业绩增长创新

唐兴通 销售增长策略专家、数字销售实战导师 专注帮助企业构建面向AI数字时代新销售体系,擅长运用数字化工具重塑销售流程,提升销售业绩。作为《挑战式销售》译者,将全球顶尖销售理论大师马修狄克逊等理论导入中国销售业界。 核心专长&…

【Attention】ICAFusion:用于多光谱物体检测的迭代交叉注意引导的特征融合

ICAFusion: Iterative cross-attention guided feature fusion for multispectral object detection 摘要: 多光谱图像的有效特征融合在多光谱物体检测中起着至关重要的作用。以往的研究已经证明了使用卷积神经网络进行特征融合的有效性,但由于局部范围…

CSP/信奥赛C++刷题训练:经典广搜例题(2):洛谷P1135 :奇怪的电梯

CSP/信奥赛C刷题训练:经典广搜例题(2):洛谷P1135 :奇怪的电梯 题目背景 感谢 yummy 提供的一些数据。 题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电…

K8S群集调度二

一、污点(Taint) 和 容忍(Tolerations) 1.1、污点(Taint) 设置在node上是对pod的一种作用 节点的亲和性,是Pod的一种属性(偏好或硬性要求),它使Pod被吸引到一类特定的节点 而Taint 则相反,它使节点能够排斥一类特…