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)
);

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

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

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

相关文章

Visual Transformer (ViT)模型详解

1 Vit简介 1.1 Vit的由来 ViT是2020年Google团队提出的将Transformer应用在图像分类的模型,虽然不是第一篇将transformer应用在视觉任务的论文,但是因为其模型“简单”且效果好,可扩展性强(scalable,模型越大效果越好…

strlen的自定义函数的三种实现方法

文章目录 一,概要二,题目三,方法1,方法一2,方法二3,方法三 四,总结 一,概要 在求字符串长度的时候我们会遇到求解字符串的长度,此时我们想到的是strlen,头文件…

如何跨系统构建docker镜像?

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 1. 前言 docker镜像有基于amd64系统的,也有基于arm64系统的。 前段时间用了一个在x86_64的centos7服务器上构建的i…

SpringBoot自动配置原理和自定义启动器

1、自动配置的原理 项目在加载上下文时,会根据SpringBootApplication注解运行。该注解中有一个CompoentScan注解,会扫描和加载当前启动类所在的目录,以及所有的子目录;还有一个是EnableAutoConfiguration注解,这个注解…

huggingface的tokenizer解读

文章目录 前言一、huggingface的tokenizer含义1、含义2、整体概括 二、加载lmsys/vicuna-7b-v1.5模型的tokenizer三、调用tokernizer方法四、字符串的tokens应用1、tokenizer应用2、tokenizer进行token分词(tokenizer.tokenize)3、tokens转模型识别ids(tokenizer.convert_token…

Centos7:Jenkins+gitlab+node项目启动(2)

Centos7:Jenkinsgitlabnode项目启动(1) Centos7:Jenkinsgitlabnode项目启动(1)-CSDN博客 Centos7:Jenkinsgitlabnode项目启动(2) Centos7:Jenkinsgitlabnode项目启动(2)-CSDN博客 Centos7:Jenkinsgitlabnode项目启…

数据结构【线性表篇】(三)

数据结构【线性表篇】(三) 文章目录 数据结构【线性表篇】(三)前言为什么突然想学算法了?为什么选择码蹄集作为刷题软件? 目录一、双链表二、循环链表三、静态链表 结语 前言 为什么突然想学算法了? > 用较为“官方…

回溯法求不等式的所有整数解

这份代码本来是用来解决这个问题的 但是&#xff0c;修改之后即可用来解决任意多个xi组成的满足不等式的整数解 这里用真代码而不是伪代码来表示 源代码&#xff1a; #include<iostream> using namespace std; const int N1010; int p,q,r,goal,n; int cnt,sum,MIN; i…

ES6之生成器(Generator)

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…

挑战Python100题(9)

100+ Python challenging programming exercises 9 Question 81 Please write a program to randomly print a integer number between 7 and 15 inclusive. Hints: Use random.randrange() to a random integer in a given range. 请编写一个程序,随机打印一个介于7和15之间…

Java学习,一文掌握Java之SpringBoot框架学习文集(1)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

2021-06-25 51蛋骗鸡按键切合LED

缘由ISIS 7 Professional_有问必答-CSDN问答 #include "REG52.h" sbit K1 P3^0; sbit K2 P3^1; sbit K3 P3^2; sbit K4 P3^3; void main() {unsigned char Xd0,xz0,cs0;unsigned int wei0;P1255;while(1){if(K10&&Xd0){P10;while(K10);}if(K20&&…

【2023 CCF 大数据与计算智能大赛】基于TPU平台实现超分辨率重建模型部署 基于预训练ESPCN的轻量化图像超分辨率模型TPU部署方案

2023 CCF 大数据与计算智能大赛 《基于TPU平台实现超分辨率重建模型部署》 作品名&#xff1a;基于预训练ESPCN的轻量化图像超分辨率模型TPU部署方案 队伍名&#xff1a;Absofastlutely 蒋松儒 计算机科学与技术系 硕士 南京大学 中国-江苏 kahsoltqq.com 吕欢欢 计算…

AI产品经理 - 如何做一款软硬协同AI产品

【背景】从0做一款软硬协同的AI产品&#xff0c;以智能医药保温箱 1.以智能医药保温箱 2.调研定义市场方向 地点&#xff1a;医药、实验室 场景&#xff1a;长宽高/装箱/运输/实验室 3.需求挖掘 4.如何进行软硬件AI产品工作 软硬件产品设计&#xff1a;功能/硬件外观设计、…

《数据库开发实践》之存储过程【知识点罗列+例题演练】

一、什么是存储过程&#xff1f; 1.概念理解&#xff1a; 存储过程是一组为了完成特定功能的SQL语句集。通过组成SQL语句和控制语句&#xff0c;提供一种封装任务的方法。因此在创建编译好某个存储过程后&#xff0c;因为存储过程中有可执行操作的sql语句&#xff0c;用户可以…

OFDM——PAPR减小

文章目录 前言一、PAPR 减小二、MATLAB 仿真1、OFDM 信号的 CCDF①、MATLAB 源码②、仿真结果 2、单载波基带/通频带信号的 PAPR①、MATLAB 源码②、仿真结果 3、时域 OFDM 信号和幅度分布①、MATLAB 源码②、仿真结果 4、Chu 序列和 IEEE802.16e 前导的 PAPR①、MATLAB 源码②…

模型 KANO卡诺模型

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。需求分析。 1 卡诺模型的应用 1.1 餐厅需求分析故事 假设你经营一家餐厅&#xff0c;你想了解客户对你的服务质量的满意度。你可以使用卡诺模型来收集客户的反馈&#xff0c;并分析客户的…

MySQL的日志管理以及备份和恢复

MySQL日志管理 mysql的日志默认保存位置为/usr/local/mysql/data vim /etc/my.cnf #开启二进制日志功能 vim /etc/my.cnf [mysqld]##错误日志&#xff0c;用来记录当MySQL启动、停止或运行时发生的错误信息&#xff0c;默认已开启 log-error/usr/local/mysql/data/mysql_…

Python从入门到网络爬虫、自动化

可以创建C、C#、Python、Golang、Java、React、Node、Vue、PHP项目 创建Java项目 创建Python项目 简单if……else……语句 # 简单的if……else……语句 state True if state:print("状态正常") else:print("状态异常")# 复杂的if……elif……语句 score …

基于 LangChain + GLM搭建知识本地库

一种利用 langchain 思想实现的基于本地知识库的问答应用&#xff0c;目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。 受GanymedeNil的项目document.ai和AlexZhangji创建的ChatGLM-6B Pull Request启发&#xff0c;建立了全流程可使用开源模…