MySQL—约束—外键约束(基础)

一、引言

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

举个例子:

提示说明:(有两张表)

(1)员工表:emp

id:主键、姓名、年龄、工作、薪资、入职时间、上级领导id 以及部门id。这个部门id指定了当前员工是属于哪一个部门的。

(2)外键约束

它关联的另外一张表dept(部门表)的主键id。此时 dept_id 就是员工表当中的一个外键。通过这个外键,让两张表的数据之间产生连接。

(3)

在这种主外键的关系中,把员工表称为子表(具有外键的表),部门表称为父表(外键所关联的这张表)。有时候叫做主表和从表。

(4)目前这种外键关系,它只是逻辑上有这么一个外键。知道外键 dept_id 它关联的就是部门表的主键 id ,但是在数据库层面,并未建立物理外键关联,是无法保证数据的一致性和完整性的。也就是意味着我们直接删除了部门表中的一条数据,如将1号部门删除掉了,此时员工表的数据会不会有变化?其实是不会有任何变化,因为在数据库层面两张表没有任何的关系,只是在逻辑上有一个关系

接下来去 DataGrip 查看具体情况。

二、创建基本表结构

(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,'总经办');

表数据插入成功!

员工表:emp

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,'总裁',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);

表数据插入成功!

三、问题与解决

目前这两张表逻辑上有着关联,员工表中的部门id:dept_id 对应着部门表的 id 。但是我们没有设置它们之间的物理外键,就无法保证数据的完整性。

如果没有设置,那么当我删除部门表中的任意一个id,那么员工表的数据没有任何变化,就会出现数据不完整和一致性的问题。所以我们就要去学习建立外键关联。

四、添加外键约束

(1)语法

添加外键。语法有两种情况。

第一种(是在创建表的时候):直接添加

第二种: (表结构创建好了之后):额外增加这样的一个外键就可以用了

注意

1、ALTER TABLE 表名 :修改指定表名

2、ADD CONSTRAINT:add constraint :添加 限制

3、外键名称可以自己定义

4、ROREIGN KEY :foreign key: 外键 

5、REFERENCES :references:参考

(2)对上面的两张表进行操作 

给员工表 emp 添加外键。

/* add constraint 外键  括号里代表的外键字段 */
ALTER TABLE emp ADD CONSTRAINT fk_emp_dept_id FOREIGN KEY (dept_id) REFERENCES dept(id);

执行前的表视图:

执行后的表视图:

这时就成功添加好了外键约束了。

(3)测试外键的作用是否对数据的完整性有用 

外键添加成功之后。这次测试一下再去删除部门表 dept 中的id字段,看能不能删除成功?

因为要删除父表 dept 中id为1的字段,而子表 emp 中的字段dept_id 还有那么多值关联着id=1的记录,不能直接删除,这样就保证了数据的一致性和完整性。

五、删除外键约束

语法:

注意

1、ALTER TABLE :修改指定表

2、DROP:删除

操作:

ALTER TABLE emp DROP FOREIGN KEY fk_emp_dept_id;

外键删除成功! 

这篇博客的所有内容就到这了。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

qt+ffmpeg 实现音视频播放(四)之音视频同步

在处理音视频数据时,解码音频的数据往往会比解码视频的数据比较慢,所以我们在播放音视频时,音频和视频的数据会出现渐渐对不上的情况。尤其在播放时间越长的时候,这种对不上的现象越明显。 为了解决这一问题,人们想出…

485通讯网关

在工业自动化与智能化的浪潮中,数据的传输与交互显得尤为重要。作为这一领域的核心设备,485通讯网关凭借其卓越的性能和广泛的应用场景,成为了连接不同设备、不同协议之间数据转换和传输的桥梁。在众多485通讯网关中,HiWoo Box以其…

MySQL报ERROR 2002 (HY000)解决

今天在连接客户服务器时MySQL的时候报: ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql/mysql.sock’ (2) [rootXXX ~]# mysql -uroot -p Enter password: ERROR 2002 (HY000): Can’t connect to local MySQL server through socket…

SpringBoot邮件发送的安全性如何有效保障?

SpringBoot邮件发送服务如何集成?怎么优化邮件发送? Spring Boot作为一个流行的Java开发框架,提供了便捷的邮件发送功能,使得开发者可以轻松地集成邮件发送到他们的应用程序中。AokSend将探讨如何有效地保障Spring Boot邮件发送的…

linux驱动学习(四)之module

一、内核模块 内核模块是一种可以动态加载到操作系统内核中并扩展其功能的软件。它们允许在运行的操作系统内核中增加新的功能或驱动程序,而无需重新启动计算机。 在linux系统中,驱动程序是各自独立存在的,而且驱动程序中包含一个moudle&am…

抽屉式备忘录(共25041字)

Sing Me to Sleep <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>与妖为邻的备忘录</title&g…

【UE5.1 角色练习】09-物体抬升、抛出技能 - part1

前言 在上一篇&#xff08;【UE5.1 角色练习】08-传送技能&#xff09;的基础上继续实现控制物体抬升、抛出的功能。 效果 步骤 一、准备技能动画 1. 在项目设置中新建一个操作映射&#xff0c;这里命名为“Skill_GravityControl”&#xff0c;用按键4触发 2. 通过IK重定向…

ESP使用巴法云远程OTA(VScode + Platform io)

ESP使用巴法云远程OTA&#xff08;Platform&#xff09; 什么是OTA&#xff1a; OTA&#xff08;Over-the-AirTechnology&#xff09;即空中下载技术&#xff0c;是通过移动通信的空中接口实现对移动终端设备及SIM卡数据进行远程管理的技术。OTA升级是物联网&#xff08;IOT&am…

[深度学习]yolov10+deepsort+pyqt5实现目标追踪

YOLOv10DeepSORTPyQt5实现目标追踪系统 在现代智能监控系统中&#xff0c;目标追踪技术扮演着至关重要的角色。结合YOLOv10&#xff08;一种先进的实时目标检测算法&#xff09;与DeepSORT&#xff08;一种多目标追踪算法&#xff09;&#xff0c;并通过PyQt5构建用户界面&…

想要做好海外广告投放?建议这几点先了解清楚

在全球市场竞争日益激烈的今天&#xff0c;跨境电商和出海营销早已经成为了热门选择&#xff0c;随之而来海外广告的投放也受到众多人的青睐。无论是想要提升品牌知名度&#xff0c;还是实现销售增长&#xff0c;正确的广告投放都能事半功倍。错误的选择不仅浪费资源&#xff0…

【Qt秘籍】[006]-Label实现Hello World程序-编程第一步

"Hello,World!" 中文意思是“你好&#xff0c;世界”。 因为 The C Programming Language 中使用它做为第一个演示程序&#xff0c;后来很多程序员在学习编程或进行设备调试时延续了这一习惯。 下面&#xff0c;我们也将演示利用Label显示Qt中的"Hello World!&q…

深度学习笔记:0.cuda安装,成功

B站上说&#xff1a;cs上骗子太多。文章太久&#xff0c;我深以为然。用了一天。才装好。其实很简单。 CUDA安装教程&#xff08;超详细&#xff09;-CSDN博客文章浏览阅读1w次&#xff0c;点赞5次&#xff0c;收藏56次。windows10 版本安装 CUDA &#xff0c;首先需要下载两个…

秋招突击——第四弹——Java的SSN框架快速入门——Spring(2)

文章目录 前言其他Spring加载properties 容器创建容器获取beanBeanFactory容器总结 注解注解开发对定义bean纯注解开发Bean管理Bean作用范围Bean生命周期 注解开发依赖注入第三方bean管理第三方bean管理第三方bean注入 注解开发总结 Spring整合整合mybatis整合Junit AOPAOP核心…

Mybatis实现树形结构方式

1&#xff0c;三级分类树形结构查询 /*** DDD(Domain-Driven Design): 领域驱动设计** 三级分类树形结构&#xff1b;* 支持无限层级&#xff1b;* 当前项目只有三级*/ Data public class CategoryTreeTo {private Long categoryId; //1private String categoryName;private …

外观数列 ---- 模拟

题目链接 题目: 分析: 题目的意思如下:所以我们需要引用双指针来找到连续的字符有几个, 并添加到答案中, 接着将此字符添加到答案中, 让left right , 继续向后遍历整个字符串, 重复上面的操作将答案重新赋给字符串, 继续重复上述操作, 应该重复n - 1 次, 因为n为1的时候, 直…

上网是不是必须路由器和光猫之一负责拨号?

链接&#xff1a;https://www.zhihu.com/question/624856022/answer/3245182557 上网并非一定要“拨号”&#xff0c;使用固定IP地址可以直接上网&#xff0c;不需要拨号。你们公司的宽带属于商用宽带&#xff0c;运营商&#xff08;电信&#xff09;给配置了固定的IP&#…

如何监控企业微信聊天记录内容,第二个方法太赞了!

监控企业微信聊天记录内容是企业为了确保沟通合规、提升工作效率、防止信息泄露以及保护公司利益而采取的一种管理措施。在当前的中国&#xff0c;是法律允许的合法行为。 怎么监控&#xff1f;请看下面详情。 1. 利用企业微信自带功能 企业会话存档&#xff1a; 企业微信提…

43页 | 2024年企业级BI平台白皮书(免费下载)

【1】关注本公众号&#xff0c;转发当前文章到微信朋友圈 【2】私信发送 2024年企业级BI平台白皮书 【3】获取本方案PDF下载链接&#xff0c;直接下载即可。 诚挚邀请您微信扫码加入以下方案驿站知识星球&#xff0c;获取上万份PPT/WORD解决方案&#xff01;&#xff01;&…

【Python Cookbook】S01E16 同时对数据做转换和换算

目录 问题解决方案讨论 问题 当换算&#xff08;sum(), min(), max()&#xff09;同时遇到转换或筛选&#xff0c;怎么做&#xff1f; 解决方案 有一种非常优雅的方法&#xff0c;可以将数据换算和转换结合在一起——在函数参数中使用 生成器表达式。 一个直观的案例&#…

YOLOv8+PyQt5海洋船只检测(可以重新训练,yolov8模型,从图像、视频和摄像头三种路径识别检测)

1.效果视频&#xff1a;海洋船只检测yoloV8检测&#xff08;https://mbd.pub/o/bread/mbd-ZpaYk55r&#xff09;_哔哩哔哩_bilibili资源包含可视化的海洋船只检测系统&#xff0c;可对于高空拍摄到的海洋图片进行轮船检测&#xff0c;基于最新的YOLOv8训练的海洋船只检测模型&a…