MySQL基础入门(二)

多表内容

一对多

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

外键约束

在关系型数据库中,外键约束(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.mzph.cn/news/587515.shtml

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

相关文章

【OpenAI Q* 超越人类的自主系统】DQN :Q-Learning + 深度神经网络

深度 Q 网络:用深度神经网络,来近似Q函数 DQN(深度 Q 网络) 深度神经网络 Q-LearningQ-Learning模型结构损失函数经验回放探索策略流程关联 DQN 优化DDQN:双 DQN,实现无偏估计Dueling DQN:提高…

Quartus的Signal Tap II的使用技巧

概述: Signal Tap II全称Signal Tap II Logic Analyzer,是第二代系统级调试工具,它集成在Quartus II软件中,可以捕获和显示实时信号,是一款功能强大、极具实用性的FPGA片上调试工具软件。 传统的FPGA板级调试是由外接…

ROS学习记录:用C++实现对wpr_simulation软件包中机器人的运动控制

一、在工作空间下输入catkin_make进行编译 二、在工作空间中输入source ./devel/setup.bash后回车 三、机器人的运动控制在wpr_simulation中有一个例子程序,在工作空间中输入: roslaunch wpr_simulation wpb_simple.launch后回车 四、就会启动一个仿真环…

菜鸟网络Java实习一面面经

自我介绍,做过的项目 巴拉巴拉 你项目中用到redis,可以介绍一下为什么使用它吗? 基于内存操作,内存读写速度快。 支持多种数据类型,包括String、Hash、List、Set、ZSet等。 支持持久化。Redis支持RDB和AOF两种持久…

Transformer基本结构

Transformer基本结构 输入部分、编码部分、解码部分、输出部分 1、输入部分 原文本嵌入层及其位置编码器目标文本嵌入层及其位置编码器 位置编码器(PositionalEncoding):将词汇位置不同可能会产生不同语义的信息加入到词张量中,以弥补位置信息的缺失 …

Win10 + 4090显卡配置深度学习环境 + gaussian-splatting配置 + 实测自己的场景

目录 1 安装Anaconda 2023.09版本 2 安装CUDA11.8 3 安装深度学习库Cudnn8.6.0 4 安装VSCODE2019 5 安装Colmap3.8 6 安装git 7 安装Python3.10 Pytorch2.0.0 7 安装项目 8 采集数据 8.1 IPhone 14 pro 拍摄30张照片左右 做预处理 8.2 生成colmap位姿等信息 8.3 开…

STM32——F407定时器概述

1 定时器分类 定时器类型数量位号位宽时钟捕获/比较输出DMA请求计数互补输出基本2TIM6,TIM716bitAPB1-有递增-通用2TIM2,TIM532bitAPB14通道有递增、递减、中心对齐-通用2TIM3,TIM432bitAPB14通道有递增、递减、中心对齐-通用1TIM916bitAPB14通道有递增-通用2TIM10、TIM1116bi…

独立站的营销策略:吸引顾客的秘密武器

一、独立站的重要性 独立站是指企业自主建立的电子商务网站,具有独立的域名和运营管理权。通过独立站,企业可以展示产品信息、提供在线服务、进行促销活动等,与顾客建立互动和信任关系。独立站的重要性在于它可以帮助企业建立品牌认知度、提…

面向对象基础-类与对象-封装

1、类与对象 1.1 概念 类:类是一个抽象的概念,用于描述一类对象的特点。 对象:根据类的概念所创造的实体。 【思考】一个对象可以没有对应的类嘛? 不可以,因为必须现有类才能创建对象。 1.2 类的内容 类中最基础的内容…

pygame学习(一)——pygame库的导包、初始化、窗口的设置、打印文字

导语 pygame是一个跨平台Python库(pygame news),专门用来开发游戏。pygame主要为开发、设计2D电子游戏而生,提供图像模块(image)、声音模块(mixer)、输入/输出(鼠标、键盘、显示屏)…

maven中dependencyManagement标签

简介 dependencyManagement正如其名,用于项目依赖的统一管理。 在父项目中的pom.xml文件中加入dependencyManagement标签即可完成依赖版本的声明。在声明完成后,子项目(module)中引用相同的依赖时可以不指定version标签自动引入…

【26.4K⭐】ShareX:一款开源免费、功能强大且丰富的截屏录屏软件

【26.4K⭐】ShareX:一款开源免费、功能强大且丰富的截屏录屏软件 在日常工作、学习和娱乐过程中,我们经常需要截取屏幕或者录制屏幕上特定区域中的内容并进行标记、编辑等操作。无论是为了记录重要的信息、分享有趣的内容,还是为了制作教程和…

toto的2023年终总结

第一次写年终总结,其实顺带是把大学四年的学习都给总结了一下,称之为大学总结更为合适吧? 其实把年终总结发在CSDN上有些不适,之前一直想着搭一个自己的博客也因为种种事情一直没有完成, 索性发在这里了,作…

20231228在Firefly的AIO-3399J开发板的Android11的Firefly的AIO-3399J开发板的DTS配置单前置摄像头ov13850

20231228在Firefly的AIO-3399J开发板的Android11的Firefly的AIO-3399J开发板的DTS配置单前置摄像头ov13850 2023/12/28 12:30 开发板:Firefly的AIO-3399J【RK3399】 SDK:rk3399-android-11-r20211216.tar.xz【Android11】 Android11.0.tar.bz2.aa【ToyBr…

unity学习笔记----游戏练习03

一、修复植物种植的问题 1.当手上存在植物时,再次点击卡片上的植物就会在手上添加新的植物,需要修改成只有手上没有植物时才能再次获取到植物。需要修改AddPlant方法。 public bool AddPlant(PlantType plantType) { //防止手上出现多个植…

分享一个学习Typescript最全的Github网站

一个专注研究Typescript的网站,🎖🎖🎖在这里你可以全面深入学习Typescript相关知识,通过动画方式讲解TS,还有很多常见问题解答。你还可以挑战相应的题目,快来学习吧 我就懒一点,直接原滋原味的…

c语言:打印平行四边形|练习题

一、题目 输入平行四边形的边数&#xff0c;用星号打印平行四边形 如图&#xff1a; 二、思路分析 图形分为两部分 1、左边的空格 2、右边的星号 因此&#xff0c;把空格和星号合起来&#xff0c;就是要求的图形 三、代码图片【带注释】 四、源代码【带注释】 #include <s…

【AI】计算机视觉VIT文章(Transformer)源码解析

论文&#xff1a;Dosovitskiy A, Beyer L, Kolesnikov A, et al. An image is worth 16x16 words: Transformers for image recognition at scale[J]. arXiv preprint arXiv:2010.11929, 2020 源码的Pytorch版&#xff1a;https://github.com/lucidrains/vit-pytorch 0.前言 …

三角函数两角和差公式推导

一.几何推理 1.两角和公式 做一斜边为1的直角△ABC,任意旋转非 k Π , k N kΠ,kN kΠ,kN,补充如图,令 ∠ A B C ∠ α &#xff0c; ∠ C B F ∠ β ∠ABC∠α&#xff0c;∠CBF∠β ∠ABC∠α&#xff0c;∠CBF∠β ∴ ∠ D B F ∠ D B A ∠ α ∠ β 90 , ∠ D A …

Linux基础知识学习3

vim编辑器 其分为四种模式 1.普通(命令)模式 2.编辑模式 3.底栏模式 4.可视化模式 vim编辑器被称为编辑器之神&#xff0c;而Emacs更是神之编辑器 普通模式&#xff1a; 1.光标移动 ^ 移动到行首 w 跳到下一个单词的开头…