MySQL基础入门(二)

news2025/3/1 20:56:57

多表内容

一对多

这个内容是黑马的入门问题,可以带大家思考一下这个怎么设计
在这里插入图片描述
我们要知道一个岗位可以对应很多用户,而一个用户只能对应一个岗位,这就属于一对多的类型
那么我们需要怎么将他们进行关联呢?
现在我们可以通过一个新的知识点来进行关联,使用外键进行约束。

外键约束

在关系型数据库中,外键约束(Foreign Key Constraint)是一种用于维护表与表之间关系的约束。它定义了两个表之间的引用关系,确保引用数据的完整性和一致性。

外键约束的作用可以总结为以下几点:

引用完整性:外键约束确保引用的数据必须存在于被引用的表中,以确保数据的完整性。这意味着在插入或更新数据时,引用的值必须存在于引用表的主键列或唯一索引列中。

数据一致性:外键约束确保引用的数据在被引用表中的变动能够正确反映在引用表中。如果尝试删除或修改被引用表中的某行数据,但在引用表中存在对该行数据的引用,则会触发外键约束,阻止删除或修改操作,以保持数据一致性。

关联查询:外键约束还可以用于进行关联查询。通过定义外键关系,可以使用JOIN操作来连接相关的表,从而实现跨表查询和数据关联分析。
在创建表时,可以使用FOREIGN KEY关键字来定义外键约束。一个外键约束通常由两个部分组成:

1.外键列(Foreign Key Column):在引用表中的列,用于存储与被引用表相关联的值。

2.引用表(Referenced Table):被引用的表,其中包含外键列对应的主键列或唯一索引列。

举例使用

CREATE TABLE orders (
   order_id INT PRIMARY KEY,
   customer_id INT,
   order_date DATE,
   ...
   FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

这个定义了一个一个名为orders的表,其中customer_id列作为外键列,引用了customers表中的customer_id列。这样,每次插入或更新orders表时,数据库会验证customer_id的值是否存在于customers表的customer_id列中,并确保数据引用的完整性和一致性。

设计

下面我们来解决我们先前的问题,一个员工表和一个岗位表的外键约束
先直接创建这个员工表和岗位表

-- 创建岗位表
CREATE TABLE Position (
  position_id INT PRIMARY KEY,
  position_name VARCHAR(50)
);

-- 创建员工表
CREATE TABLE Employee (
  employee_id INT PRIMARY KEY,
  employee_name VARCHAR(50),
  position_id INT,
  FOREIGN KEY (position_id) REFERENCES Position(position_id)
);

我们可以知道,员工的岗位内容,是依赖于岗位表的变化而变化的,当岗位表不需要某一个岗位的时候,公司就会将这部分员工剔除,那么员工中被删除岗位的那部分将被清除。
Position 表包含了岗位的信息,其中 position_id 是主键列,用于唯一标识每个岗位。Employee 表包含了员工的信息,其中 employee_id 是主键列,position_id 是外键列,用于关联岗位表的主键列 position_id。通过在 Employee 表的外键列上添加 FOREIGN KEY 约束,并引用 Position 表的主键列,我们可以正确的建立了员工表和岗位表之间的关联。

多对多类型

建立第三张中间表,中间表至少需要包含两个外键,分别关联两方的主键。
假设我们有两个表:学生表(Student)和课程表(Course),一个学生可以选择多门课程,一门课程也可以被多个学生选择。我们可以使用中间表来记录学生和课程之间的关联关系。

下面是一个示例 SQL 代码,展示了如何创建学生表、课程表和中间表,并建立它们之间的多对多关系:

-- 创建学生表
CREATE TABLE Student (
  student_id INT PRIMARY KEY,
  student_name VARCHAR(50)
);

-- 创建课程表
CREATE TABLE Course (
  course_id INT PRIMARY KEY,
  course_name VARCHAR(50)
);

-- 创建中间表
CREATE TABLE Student_Course (
  student_id INT,
  course_id INT,
  FOREIGN KEY (student_id) REFERENCES Student(student_id),
  FOREIGN KEY (course_id) REFERENCES Course(course_id),
  PRIMARY KEY (student_id, course_id)
);

学习这部分知识,需要多进行设计,联系,做到真正的熟练使用。

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

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

相关文章

【数据结构—堆排序、top k问题和时间复杂度】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、堆排序(升序) 1.1向上调整算法: 1.2向下调整算法: 1.3、堆排序的实现: 二、top k问题 2.1top k…

x-cmd pkg | 比 du 更好用的查看磁盘空间工具:dust

目录 简介首次用户技术特点竞品和相关作品进一步探索 简介 Dust 是一个用于分析磁盘空间使用情况的命令行工具,旨在提供直观的磁盘分布信息,它的名字是由 “du” 和 Rust 编程语言组合而来。 Dust 的主要功能是提供实时的磁盘空间概览,并以…

文心一言 VS 讯飞星火 VS chatgpt (168)-- 算法导论13.2 1题

一、用go语言,写出 RIGHT-ROTATE 的伪代码。 文心一言: 在计算机科学中,右旋转(RIGHT-ROTATE)是一种常见的操作,通常用于数组或链表。以下是一个使用Go语言实现右旋转的伪代码: func rightRo…

程序员绩效考核表就是这么简单

大家好,今天给大伙分享一份程序员的绩效考核表,仅供参考! 《程序员绩效考核表》

【软件工程】融通未来的工艺:深度解析统一过程在软件开发中的角色

🍎个人博客:个人主页 🏆个人专栏: 软件工程 ⛳️ 功不唐捐,玉汝于成 目录 前言: 正文 统一过程(Unified Process) 介绍和解释: 应用: 优缺点&#xf…

el-table表格自动循环向上滚动鼠标放上去停止,移开恢复

排序的图标是两个图片&#xff0c;点击向后端发请求带不同的参数 <template><div style"height: 100%" class"table-content"><div :style"{ position: absolute, z-index: 9999, right: 3%, top: 0 }":class"tagBtn bg${c…

ALSA学习(5)——设备中的alsa

参考博客&#xff1a; https://blog.csdn.net/DroidPhone/article/details/7165482 &#xff08;一下内容基本是原博主的博客转载&#xff09; 文章目录 一、ASOC的由来二、硬件架构三、软件架构四、数据结构五、内核对ASoC的改进 一、ASOC的由来 ASoC–ALSA System on Chip …

【开源】基于Vue+SpringBoot的毕业生追踪系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 登陆注册模块2.2 学生基本配置模块2.3 就业状况模块2.4 学历深造模块2.5 信息汇总分析模块2.6 校友论坛模块 三、系统设计3.1 用例设计3.2 实体设计 四、系统展示五、核心代码5.1 查询我的就业状况5.2 初始化就业状况5.…

Udp实现一个小型shell

实现原理 首先我们要有个客户端和一个服务器&#xff0c;客户端向服务器传递命令。而服务器收到命令后创建一个管道&#xff0c;并fork一个子进程。随后子进程解析命令&#xff0c;再把标准输出换成管道文件&#xff0c;因为命令行命令是自动输出到显示器的&#xff0c;所以我…

程序员必备IDEA插件,什么是是IDE?

IDEA是一款功能强大的集成开发环境&#xff08;IDE&#xff09;插件&#xff0c;它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。 我们在编写完接口代码后需要进行接口调试等操作&#xff0c;一般需要打开额外的调试工具。今天就给大家介绍一款IDEA插件&#xff…

【MATLAB第87期】#源码分享 | 基于MATLAB的增量神经系统网络SFAM多输入单输出多分类预测模型

【MATLAB第87期】#源码分享 | 基于MATLAB的增量神经系统网络SFAM多输入单输出多分类预测模型 前言 SFAM是一种增量神经网络分类器。它是模糊ARTMAP&#xff08;FAM&#xff09;的一个简单而快速的版本。如果输入相同,FAM和SFAM的产出相同。 参考文献: [1] Kasuba, T. (1993)…

【Redis-03】Redis数据结构与对象原理 -下篇

承接上篇【Redis-02】Redis数据结构与对象原理 -上篇 8. type-字符串string 8.1 字符串的三种encoding编码&#xff08;int embstr raw&#xff09; 如果保存的是整型&#xff0c;并且可以用long类型标识&#xff08;-9223372036854775808到9223372036854775807&#xff09…

Git:常用命令(二)

查看提交历史 1 git log 撤消操作 任何时候&#xff0c;你都有可能需要撤消刚才所做的某些操作。接下来&#xff0c;我们会介绍一些基本的撤消操作相关的命令。请注意&#xff0c;有些操作并不总是可以撤消的&#xff0c;所以请务必谨慎小心&#xff0c;一旦失误&#xff0c…

大连理工大学软件学院2022年秋季学期《矩阵与数值分析》上机作业

文章目录 《计算机科学计算》第二版162页第12题&#xff08;1&#xff09;162页第16题216页第12题 《数值分析方法与应用》一、基础知识部分1、5、 二、线性方程组求解2、6、 三、非线性方程组求解1、4、 四、插值与逼近1、5、7、 五、数值积分2、 六、微分方程数值解法1、 《计…

com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The

配置文件示例: # SQL Server 数据源配置 spring.datasource.dynamic.datasource.sqlserver.urljdbc:sqlserver://100.100.0.0\\shili;databaseNamecs; spring.datasource.dynamic.datasource.sqlserver.usernamesa spring.datasource.dynamic.datasource.sqlserver.password sp…

C#,入门教程(03)——Visual Studio 2022编写彩色Hello World与动画效果

C#&#xff0c;入门教程(01)—— Visual Studio 2022 免费安装的详细图文与动画教程https://blog.csdn.net/beijinghorn/article/details/123350910 C#&#xff0c;入门教程(02)—— Visual Studio 2022开发环境搭建图文教程https://blog.csdn.net/beijinghorn/article/detail…

毫秒格式化

## 计算当前毫秒数&#xff1a; const [start,setStart] useState(new Date().getTime())useEffect(()>{setInterval(()>{setCurrMill(new Date().getTime()-start)},1)},[]) ## 格式化毫秒 function formatMilliseconds(milliseconds) {const totalSeconds Math.flo…

WEB 3D技术 three.js通过 GLTFLoader 导入并应用 gltf/glb 3D资源

上文 WEB 3D技术 three.js 雾 基础使用讲解我们讲了雾的基本使用方法 但是 如果我们要做一个树林 一颗一颗树去加 那真的是要累死了 我们一定是在建模软件上 建模好这样的模型 然后将模型导入到场景中 官网中搜索 GLTFLoader 在我们日常WEB开发中 用的最多的3D格式 就是 GLTF…

门控循环单元(GRU)-多输入时序预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、部分代码&#xff1a; 四、完整代码数据下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译…