MySQL表的增删查改(进阶)
所有操作:主要讲了数据库的约束,表之间的关系,新增,聚合查询,联合查询等内容。是一篇博客所有操作的记录。 · 844d186 · 风夏/mysql_learning - Gitee.com
数据库约束
1.1 约束条件
not null -指定某个列不能储存null值。
unique -保证某一列的每一行必须有唯一的值。
default -规定没有给列赋值时的默认值,如果不修改,是null.
primary key -not null和unique的结合,确保某一列(或两个列多个列的结合)有唯一标识,有助于更容易更快速的找到表中的一个特定记录。
foreign key -保证一个表中的数据匹配另一个表中的值的参照完整性。
1.2 null约束
创建表的时候,可以指定某一列不为空:

1.3 unique:唯一约束
指定sn列为唯一的,不可重复的:

1.4 default:默认值约束
在指定插入数据的时候,如果没有插入到某一列,将会用默认值填充

【错误】stdent 应当为student;
1.5 primary key:主键约束
指定id列为主键:

对于整数类型的主键,我们经常搭配着自动增长auto_increment来使用。插入数据对应字段不给值时,使用最大值+1(如果中间我们手动赋值后,再插入数据时,系统会使用最大值+1)
id int primary key auto_increment,
1.6 foreign key:外键约束
外键用于关联其他表的主键或者唯一键,语法
foreign key(字段名)references 主表(列)
【案例】
先创建班级表classes,id为主键

创建学生表,一个学生对应一个班级,一个班级对应多个学生。使用id作为主键,使用classes_id作为外键,关联到班级表id。

展示效果

当我们在查询的时候,我们可以通过对应的班级序号,找到相应的班级。
如果学生表中插入的班级序号在班级表里不存在,也是不被系统允许的。
【缺点】
在插入学生的信息时,由于关联到班级表,需要检查classes_id的合法性,这可能会拖慢效率。
在删除班级表的信息时,如果在学生表中被使用,是不允许删除的。
2.表的设计
表之间的关系
2.1一对一

一对一的关系:人和身份号,学生和学号,员工和工号等,都是一一对应的,每一个人学生都有且仅有一个学号,一个学号仅对应一名学生。
2.2一对多

一对多的关系:一个学生对应一个班级,一个班级拥有很多学生;一个人拥有一个家庭,一个家庭又有多名成员等。
2.3多对多

多对多的关系:一个学生有很多课程,每个课程有很多学生。
3.新增
将已有的(部分)数据转移到新的表格中。
语法:
Insert into table_name [(column)] select();
【实例】创建一张用户表,设计有name, email, sex, mobile字段,需要把已有的学生信息复制过来,可以复制的字段有name, qq_mail

【优势】这样我们能更加快速的插入已有的信息到新的表格中,大大减少的操作的复杂度。
4.查询
4.1聚合查询
4.1.1聚合函数
常见的统计总数、计算平均值等操作,可以使用聚合函数来实现,常见的聚合函数有:
函数 | 说明 |
count([distinct] expr) | 返回查询到的数据的数量; |
sum([distinct] expr) | 返回查询到的数据的总和,不是数字就没有意义; |
avg([distinct] expr) | 返回查询到的平均值,不是数字没有意义; |
max([distinct] expr) | 返回查询到的数据的最大值,不是数字没有意义; |
min([distinct] expr) | 返回查询的数据的最小值,不是数字没有意义; |
【案例】
count()

【注意】
第一种和第二种查询方式,没有区别,统计的都是全部学生的条数,即使有一个学生的任何信息都为null,也会被统计。
第三种只能统计某一列不为null的记录条数,如果有一个学生的qq_mail为null,这条记录也会被统计,如果记录时默认值,不是null,同样也会被统计。
sum()

avg()

max()和min()

4.1.2 group by语句
select 中使用group by子句可以对指定列进行分组查询。但是需要满足以下条件:使用group by 进行分组查询时,select指定的字段必须是'分组依据字段’,其他字段若想出现在select中则必须包含在聚合函数中。
select column1, sum(column2),... from table_name group by column1,...;
【案例】

4.1.3 having
group by子句进行分组以后,可以对分组结果进行条件过滤,这是我们就用having。
having和where的区别:
where是对整张表中的数据根据条件进行逐条的过滤,然后在进行分组。
having是先对表进行分组,然后根据having后面的条件进行过滤。
有些是有我们只能使用having,比如:只输出公司部门员工的平均工资大于20000元的部门,这是只有先分组进行统计,然后然后才能筛选。
但是很多时候having和where是通用的。

4.2联合查询
实际开发过程总一个表的信息是不够的,需要多张表联合查询。多表查询是对多张表的数据取笛卡尔积:

【注意】关联查询可以对关联表使用别名
初始化数据:
-- 联合查询
-- 初始化数据
insert into classes(name, desc) values
('计算机系2019级1班', '学习了计算机原理、C和Java语言、数据结构和算法'),
('中文系2019级3班','学习了中国传统文学'),
('自动化2019级5班','学习了机械自动化');insert into student(sn, name, qq_mail, classes_id) values
('09982','黑旋风李逵','xuanfeng@qq.com',1),
('00835','菩提老祖',null,1),
('00391','白素贞',null,1),
('00031','许仙','xuxian@qq.com',1),
('00054','不想毕业',null,1),
('51234','好好说话','say@qq.com',2),
('83223','tellme',null,2),
('09527','老外学中文','foreigner@qq.com',2);insert into course(name) values
('Java'),('中国传统文化'),('计算机原理'),('语文'),('高阶数学'),('英文');insert into score(score, student_id, course_id) values
-- 黑旋风李逵
(70.5, 1, 1),(98.5, 1, 3),(33, 1, 5),(98, 1, 6),
-- 菩提老祖
(60, 2, 1),(59.5, 2, 5),
-- 白素贞
(33, 3, 1),(68, 3, 3),(99, 3, 5),
-- 许仙
(67, 4, 1),(23, 4, 3),(56, 4, 5),(72, 4, 6),
-- 不想毕业
(81, 5, 1),(37, 5, 5),
-- 好好说话
(56, 6, 2),(43, 6, 4),(79, 6, 6),
-- tellme
(80, 7, 2),(92, 7, 6);

4.2.1内连接
语法:
select 字段 from 表1 as 别名1 [inner] join 表二 as 别名二 on 链接条件 and 其他条件;
select 字段 from 表1 别名,表2 别名2 where 链接条件 and 其他条件;
因为内连接使用到了笛卡尔积,就会产生很多的无效数据(比如:同学1的信息对应到同学2的成绩),我们需要使用on来排除无效数据。
【案例】
查询许仙同学的成绩。

查询所有同学的总成绩,以及同学的个人信息:

查询所有同学的成绩,以及同学的信息

4.2.2外连接
外连接分为左外链接和右外链接。如果联合查询,左侧的表完全显示我们就说是左外链接;右侧的表完全显示我们就说是左外链接。
语法:
-- 左外链接,表1完全显示
select 字段名 from 表1 left join 表2 on链接条件;
-- 有外链接,表2完全显示
select 字段名 from 表1 right join 表2 on 链接条件;
【案例】查询所有同学的成绩,及同学的个人信息,如果某同学没有成绩,也需要显示



【解析】3表关联查询,前两张表先进行笛卡尔积,然后进行筛选,然后再与第三张表进行笛卡尔积,再进行筛选,得到最后的结果。
【注意】进行笛卡尔积的时候,要谨慎,不能两张表都有相当大的数据量,这样可能导致程序崩溃。
4.2.3自链接
自链接是指在同一张表链接自身进行查询,即:对自己进行笛卡尔积.
【案例】
显示所有计算机原理成绩比Java成绩高的成绩信息
【难点】所有的成绩信息都是在同一列,不能使用列与列之间的比较。

4.2.4子查询
子查询是指嵌入在其他sq;语句中的select语句,也叫嵌套查询
单行子查询:返回一行记录的子查询
查询与 不想毕业 同学的同班同学

多行子查询:返回多行记录的子查询
查询 语文 或 英文 课程的信息

4.2.5合并查询
在实际应用中,为了合并多个select的执行结果,可以使用集合操作符union, union all。使用union和union all时,前后查询的结果几种,字段需要一致。
union
该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。
案例:查询id<3或者名字为英文的课程:
-- 合并查询
-- 查询id<3或者名字为英文的课程
select * from course where id < 3
union
select * from course where name = '英文';-- 或者使用or
select * from course where id < 3 or name = '英文';union all
该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。
案例:查询id<3,或者名字为java的课程

相关文章:
MySQL表的增删查改(进阶)
所有操作:主要讲了数据库的约束,表之间的关系,新增,聚合查询,联合查询等内容。是一篇博客所有操作的记录。 844d186 风夏/mysql_learning - Gitee.com数据库约束1.1 约束条件not null -指定某个列不能储存null值。un…...
【RocksDB】Ubuntu20.04下编译rocksdb
前言: 我在刚学rocksdb的时候是在2022年,但是网上的资源很少,查了好久才把rocksdb安装成功,在这里向大家分享一下我的经历,安装过程中也报了很多错误,希望大家不要迷路 首先 在虚拟机里面安装依赖的包以…...
这可能是Spring Boot Starter 讲的最清楚的一次了
Spring Boot Starter 是 Spring Boot 中非常重要的一个功能,它可以帮助开发人员快速集成各种第三方库和框架。本文将从 Spring Boot Starter 的基本概念入手,深入讲解 Spring Boot Starter 的实现原理及其应用场景。 一、Spring Boot Starter 的概念 S…...
activiti7执行流程详解
什么是工作流? 官方定义:工作流是将一组任务组织起来以完成某个经营过程:定义了任务的触发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统…...
iframe页面传值取值
业务:目标界面的是用原生js写的 , 被镶嵌到vue平台上 , 现在要求vue点击跳转的时候 ,要附带上值 ,让原生界面获取到值 , 完成页面设置查询。 想法 : vue跳转,使用this.$route.qu…...
2023年2月安全事件盘点
一、基本信息 2023年2月安全事件共造成约3796万美元损失,相较于上个月,安全事件数量与损失金额都有显著上升,其中Platypus Finance闪电贷攻击为单次利用损失之最高达850万美元。本月RugPull数量基本与上月持平,损失金额占比显著降…...
2023上海国际电商物流包装产业展览会相约上海
2023年7月5-7日 | 上海新国际博览中心 同期举办:2023上海国际快递物流产业博览会 指导单位:上海市邮政管理局 中国快递协会 主办单位:上海市快递行业协会 上海市仓储与配送行业协会 上海市物流协会 承办单位:上海信世展览服务有…...
营业执照注册资本是什么意思
一、营业执照注册资本是什么意思 营业执照上的注册资本是指合营企业在登记管理机构登记的资本总额,是合营各方已经缴纳的或合营者承诺一定要缴纳的出资额的总和。我国法律、法规规定,合营企业成立之前必须在合营企业合同、章程中明确企业的注册资本&…...
GB28181协议--SIP协议介绍
1、SIP协议简介 SIP(Session Initiation Protocol,会话初始协议)是一个用于建立、更改和终止多媒体会话的应用层控制协议,其中的会话可以是IP电话、多媒体会话或多媒体会议(GB28181安防使用的是SIP协议)。S…...
Python3 入门教程||Python3 元组||Python3 字典
Python3 元组 Python 的元组(tuple,简写为tup)与列表类似,不同之处在于元组的元素不能修改。 元组使用小括号(),列表使用方括号[]。 元组创建很简单,只需要在括号中添加元素,并使用逗…...
多元统计方法众多,分类还是排序?约束排序还是非约束排序?哪种方法或技术更适合我的研究目的或数据?
生态环境领域研究中常常面对众多的不同类型的数据或变量,当要同时分析多个因变量(y)时需要用到多元统计分析(multivariate statistical analysis)。多元统计分析内容丰富,应用广泛,是非常重要和…...
有关白盒加密
白盒密码技术白皮书 有关白盒的概念 其实白盒黑盒之类概念其实是软件保护方面的概念,在很多方面都有应用,例如 黑盒: 传统的加密技术是默认假定处于黑盒中的,也就是假定攻击者无法获得密钥。具体而言,认为攻击者并…...
C#学习系列之image控件配合ffmpeg播放视频(bitmap转image)
C#学习系列之image控件配合ffmpeg播放视频(bitmap转image)啰嗦ffmpeg输入格式与输出格式bitmap数据在image控件上显示数据转化总结啰嗦 关于音视频解码问题,采用海思解码库进行解码,存在C#托管调用动态库,会出现卡顿的…...
电容笔和Apple pencil有什么区别?开学季电容笔排行榜
与苹果的 Pencil相比,市面上常见的电容笔在压感上是没有具备重力压感,只具备着一种倾斜压感。对于绘画没有过高要求的话,其实一支普通的平替电容笔,就能为我们解决日常很多问题。它不仅可以用在办公上,也可以用在笔记、…...
【蓝桥杯每日一题】递归算法
🍎 博客主页:🌙披星戴月的贾维斯 🍎 欢迎关注:👍点赞🍃收藏🔥留言 🍇系列专栏:🌙 蓝桥杯 🌙我与杀戮之中绽放,亦如黎明的花…...
java 寻找2020
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 小蓝有一个数字矩阵,里面只包含数字 0 0 和 2 2。小蓝很喜欢 2020 2020,他想找 到这个数字矩阵中有多少个 2020 2020 。 小蓝只关注三种构成 …...
1.1 小白黑群晖构建,硬件推荐,硬件选购教程
构建一台黑群晖需要购买:CPU主板、散热器、内存条、机箱、电源、硬盘、网卡(可选)。物理机安装若需硬解需选择918/920此类机型系统进行安装。关联教程:黑群晖安装中的报错:https://guoqing.blog.csdn.net/article/deta…...
实验三、数字PID控制器的设计
实验三、数字PID控制器的设计 --- 直流闭环调速实验 一、实验目的 1.理解晶闸管直流单闭环调速系统的数学模型和工作原理;. 2. 掌握PID控制器参数对控制系统性能的影响; 3. 能够运用MATLAB/Simulink软件对控制系统进行正确建模并对模块进行正确的参数设置; 4.…...
python List和常用的方法
List:列表中包含多个数据,数据之间使用逗号分隔,索引从0开始。 空列表: dir:查看列表的所有方法 List常用方法:insert、append,extend、del、remove、pop、clear、count、index 增加insert(索引…...
PMP证书要怎么考,含金量怎么样?
对于新改版的PMP提纲,很多人都不知道如何去备考,这里我就总结一些经验,希望能帮助到大家!! 一,学习内容及考试形式? 学习内容:《PMBOK》项目管理知识体系指南,建议大家…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
