【MySQL】学习外键约束处理员工数据

](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)

🌈个人主页: Aileen_0v0
🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法
💫个人格言:“没有罗马,那就自己创造罗马~”

at first sight 乍一看,初看起来

文章目录

  • `外键约束`
    • `含义`
    • `分析`
  • `添加外键的语法`
    • `创建表的时候直接添加外键`
    • `创建完表以后额外添加`
  • `删除外键`

外键约束

含义

外键:用来让两张表数据之间建立连接,从而保证数据的完整性和一致性。

员工表emp(子表)
idnameagejobsalaryentrydatemanageriddept_id
1金庸66总裁200002000-01-01null5
2张无忌20项目经理125002005-12-0511
3杨逍33开发84002000-11-0321
4韦一笑48开发110002002-02-0521
5常遇春43开发105002004-09-0731
部门表dept(父表)
idname
1研发部
2 市场部
3 财务部
4销售部
5总经办

⚠️注意:上面两张表,在数据库层面,并未建立外键关联,所以无法保证数据的一致性和完整性。


1.准备好部门表

-- -------------------约束(外键)-------------
-- 准备数据
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 (id, name, age, job, salary, entrydate, managerid, dept_id) VALUES(1,'金庸',66,'总裁',2000,'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);

在这里插入图片描述


分析

通过这两张表我们可以看出,他们之间存在逻辑关系。但是并未设置物理外键,这就无法保证数据的一致性和完整性。

在这里插入图片描述
在这里插入图片描述

如果我们把1号部门删了,但是员工表的数据海关连着1号表,这就会导致数据出现不完整性。

在这里插入图片描述


添加外键的语法

创建表的时候直接添加外键

create table 表名(字段名 数据类型,...[constraint] [外键名称] foreign key(外键字段名) references 主表(主表列表)
);

创建完表以后额外添加

alter table 表名 add constraint 外键名称 foreign key(外键字段名) references 主表(主表列名);

在这里插入图片描述
在这里插入图片描述

再一次删除研发部

在这里插入图片描述

⚠️报错显示:我们不能直接删除父表中id为1的记录,而子表中还有非常多的记录关联着父表中id为1的记录。

删除外键

-- 删除外键
alter table 表名 drop foreign key 外键名称;
-- 删除外键
alter table emp drop foreign key fk_emp_dept_id;

在这里插入图片描述

删除完外键我们可以发现emp表的蓝色钥匙没有了。

](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)

](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【原理解密】多角度、多尺度、多目标的边缘模板匹配

学习《OpenCV应用开发:入门、进阶与工程化实践》一书 做真正的OpenCV开发者,从入门到入职,一步到位! 边缘模板匹配的基本原理 OpenCV中自带的模板匹配算法,完全是像素基本的模板匹配,特别容易受到光照影…

【剪映】如何使用曲线变速?

如何使用曲线变速 进入视频编辑界面后,选中视频,点击下方工具栏的-【变速】-【曲线变速】,进入后可以看到七个预设变速,其中后六个为系统自带预设变速,每个预设变速效果不同,直接点击这六个预设&#xff0c…

Python一些可能用的到的函数系列124 GlobalFunc

说明 GlobalFunc是算网的下一代核心数据处理基础。 算网是一个分布式网络,为了能够实现真的分布式计算(加快大规模任务执行效率),以及能够在很长的时间内维护不同版本的计算方法,需要这样一个对象/服务来支撑。Globa…

如何使用python在三天内制作出一个赛车游戏

制作一个赛车游戏是一个复杂的过程,涉及多个方面,如游戏设计、图形渲染、物理引擎、用户输入处理等。在三天内完成这个任务可能非常具有挑战性,特别是如果你是初学者。但如果你有基本的Python编程知识和一些游戏开发经验,以下是一…

尚硅谷最新Node.js 学习笔记(三)

目录 六、Node.js 模块化 6.1、介绍 什么是模块化与模块? 什么是模块化项目? 模块化好处 6.2、模块暴露数据 模块初体验 暴露数据 6.3、导入(引入)模块 6.4、导入模块的基本流程 6.5、CommonJS规范 七、包管理工具 7…

Win 10 如何升级 Win 11

方法一: 设置->Windows 更新->检查更新 然后会有许多要下载更新的,期间会要求多次重启,每次重启完之后再检查更新,直到显示是最新,然后一般会有一个Win11的入口,点这里就可以了。 我很久之前升的&…

Java-数组遍历

for循环遍历 具体描述 假设有一个数组nums,设置初始条件i0,即从数组的第一个开始,循环结束条件为i<nums.length,即数组中所有元素的数量&#xff0c;设置更新条件i,即依次遍历完数组中所有元素 实例&#xff1a; public class demo04 {public static void main(String[]…

2019年全年回顾

本文于2020年Q1完成&#xff0c;发布在个人博客网站上。 最近几年处于动荡之中&#xff0c;比较忙碌&#xff0c;好几年没有写年度总结了。 现在2020年Q1马上结束&#xff0c;先把19年的总结补了。 年度大事记 1月 启动项目迁移工作。 深圳团队的人员释放&#xff0c;在南京…

java数据结构前置知识以及认识泛型

目录 什么是集合框架 容器 时间复杂度 空间复杂度 包装类 装箱 拆箱 引出泛型 泛型类的使用 类型推导 泛型如何编译的 泛型的上界 泛型方法静态泛型方法以及泛型上界 什么是集合框架 Java 集合框架 Java Collection Framework &#xff0c;又被称为容器 containe…

算法训练营day24(补),回溯4-2

import ( "fmt" "sort" ) 78. 子集 func subsets(nums []int) [][]int { //存储全部集合 result : make([][]int, 0) if len(nums) 0 { return result } //存储单次集合 path : make([]int, 0) var backtrace func(numList []int, startIndex int) bac…

变量与运算符

目录 1. 关键字&#xff08;keyword&#xff09; 2. 标识符( identifier) 3. 变量 3.1 为什么需要变量 3.2 初识变量 3.3 Java中变量的数据类型 3.4 变量的使用 3.4.1 步骤1&#xff1a;变量的声明 3.4.2 步骤2&#xff1a;变量的赋值 4. 基本数据类型介绍 4.1 整数…

cool Nodejs后端框架 如何快速入门 写一个接口

1.cool 框架 js前端开发者 想自己写后端接口 快速入门的就是node.js 了 可以用这个框架自己做一些东西 或者实现前后端的开发 2.目录结构 这个基本上 就是cool 框架的项目结构 主要是 这个src 中的modules 文件夹 这个文件夹 主要是一些接口模块 比如 business 中 相当于…

OJ_深度优先搜索

题干 c代码 #include <iostream> #include <algorithm> using namespace std; #define Max_M 100 #define Max_N 100 char a[Max_M][Max_N],M,N; void dfs(int x,int y) {//先把w替换成.//然后遍历8个方向a[x][y] .;for(int dx -1;dx < 1;dx){for(int dy -1…

基于 Python 的大数据的电信反诈骗系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

车载诊断协议DoIP系列 —— 车载以太网诊断需求规范(网关、路由)

车载诊断协议DoIP系列 —— 车载以太网诊断需求规范(网关、路由) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自…

Springboot加载bootstrap和application原理

Springboot加载bootstrap和application原理 bootstrap.yml能被springboot加载导入依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.6</version><rel…

Bitcoin Bridge:治愈还是诅咒?

1. 引言 主要参考&#xff1a; Bitcoin Bridges: Cure or Curse? 2. 为何需关注Bitcoin bridge&#xff1f; 当前的Bitcoin bridge&#xff0c;其所谓bridge&#xff0c;实际是deposit&#xff1a; 在其它链上的BTC情况为&#xff1a; 尽管当前约有43.7万枚BTC在其它链上…

防御保护---防火墙的带宽管理

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.带宽管理概述 带宽管理是指限制网络流量的速率或控制网络流量的优先级&#xff0c;以确保网络的性能和可用性。 防火墙带宽管理核心&#xff1a; 带宽限制&#xff1a;限制非关键业务的流量…

PR:视频源素材的截取操作

导入素材后&#xff0c;双击视频素材&#xff0c;打开源视频 1&#xff1a;设置入点 2&#xff1a;设置出点&#xff0c;设置完出入点&#xff0c;抓取视频就可以将入点至出点的片段拖至时间轴上 3&#xff1a;转到入点 4&#xff1a;后退一帧 5&#xff1a;播放 6&#x…

全面理解JVM虚拟机

为什么要学JVM&#xff1f; ​ 首先&#xff1a;面试需要。面试题层出不穷&#xff0c;难道每次面试都靠背几百上千条面试八股&#xff1f; ​ 其次&#xff1a;基础决定上层建筑。自己写的代码都不知道是怎么回事&#xff0c;怎么可能写出靠谱的系统&#xff1f; ​ 然后&a…