MySQL——表内容的CURD操作

MySQL表内容的CURD

​ 与表内容相关的操作共有四种类型:Create(创建),Retrieve(读取),Update(更新),Delete(删除);

一、Create

1.1单行插入+多行插入+全列插入/指定列插入

#全列插入,忽略列属性;
#指定插入时要注意列属性要与列属性值相对应;#单行插入
insert (into) 表名 (列属性) values (对应列属性的值);#括号表示可以省略#多行插入
insert (into) 表名 (列属性) values (对应列属性的值),(对应列属性的值)...;

1.2插入替换

​ 发生了键值(主键或者唯一键)冲突,更新指定列的值;

方式一:

insert ... on duplicate key update 冲突的键 = 对应键的键值, 冲突的键 = 对应键的键值;
#需要注意的是更新的值要与原来的值不冲突;
插入的数据有三种情况,1.插入的数据冲突且更新,2行被影响;2.插入的数据没冲突,1行被影响;3.插入的数据冲突但是不更新,0行被影响;

方式二:主键或者唯一键没有发生冲突则知识进行插入,发生了冲突则是删除后再进行更新替换;

replace into 表名 (属性1,属性2) values (属性对应值1,属性对应值2);

二、Retrieve

2.1select

​ 可以根据指定的条件进行筛选,也可以按照指定的列来筛选,还可以去重做排序和分组;

​ 指定多项时需要使用’,'进行分割;

语法:
select (distinct)/*表示去重*/ column1,column2 (from 表名) (where 筛选条件) (order by cloumn1)/*根据列进行排序*/ (limit) /*限定筛选出来的结果条数*/ (group by)/*分组*/;

2.1.1select column

select column;
2.1.1.1全列查询

​ 不建议直接使用*来进行查询,否则会有大量的数据进行刷新,大量的数据进行传输;

​ 由于是全列查询,本质上是进行了遍历,所以索引数据是没有用到的;

2.1.1.2指定列进行查询

​ 可以根据输入的列属性顺序,筛选出数据;需要注意的是:先将所有的数据先拿出来,再根据需求将内容呈现出来;

2.1.1.3查询字段为表达式
select (要被执行的表达式,包括自带的各种子句,对应的筛选条件,运算表达式等)
select 属性1,属性2,属性3,属性1+属性2+属性3 as new属性;
select 属性1 new属性,属性2 new属性,属性3 new属性 from table;#as可以忽略;
2.1.1.4去重
select distinct column from 表名;

2.1.2where子句

​ 可以筛选显示出来的行数或者条目数;

比较运算符:返回值是0/1,表示假或者真;

​ > >= < <=,比较整数或者是浮点数;

​ =,判断相等,判断NULL是不安全的

​ <=>,判断相等,判断NULL是安全的,但是不建议使用;

​ is NULL/is not NULL,判断是否是NULL;

​ != <>,判断不等于,NULL不安全;

​ between a and b,判断是否在区间;

​ in(选项1,选项2),判断选项是否在集合中;

​ like,模糊匹配,%0或者多个任意字符,_表示任意一个字符;

逻辑运算符

​ and,逻辑与,大小写忽略,可以写成&&;

​ or,逻辑或,大小写忽略,可以写成||;

​ not,逻辑非,大小写忽略;

SQL语句的执行顺序

select/*3*/ name 姓名, math+chinese+english 总分 /*1*/from exam_result /*2*/where math+chinese+english<200;/*4*/执行 order by语句;/*5*/执行 limit 分页子句;

​ 先执行from,再执行筛选条件,最后根据列需求筛选出来;起别名在最后一步;

2.1.3order by子句

需要注意的是:NULL值比任何值都小;

asc#表示升序;默认使用的是升序;
desc#表示降序;
#语法格式:
select column 别名 from 表名 where表达式 order by column1 升序或者降序,column2 升序或者降序;

​ 排序子句执行顺序在最后,因为排序是已经将需要的数据筛选了出来,才可以进行排序;

2.1.4limit

select ... limit m,n/*m表示从m+1行开始显示,n表示读取的行数或者条目数*/即下标从0开始;
select ... limit n offset m;
通过修改起始位置实现分页效果;n也表示每一页的大小;

注意:对未知表进行查询时,最好在最后位置加上limit 1,防止大量的数据从磁盘中载入到内存中,导致卡死

三、Update

​ 对最后能显示的结果进行更新;必须添加筛选条件;

#语法格式:
update 表名 set column = 表达式或者是具体的值,column = 表达式或者是具体的值 where 表达式 order by limit m,n;

四、Delete

4.1删除列

delete from 表名 where... order by... limit...;

4.2删除表

方式一:删除表

delete from 表名;

​ 需要注意的是:不会将自增序列(表外属性)进行修改或者是置零;

方式二:截断表

truncate 表名;

​ 与删除表相比,会将表外属性自增序列进行删除,效果上就是直使得自增序列置零了;

补充知识

​ 直接就将表中的数据清空了,不走事务,之前的sql语句都会经过事务的包装才会叫给MySQL去执行;

​ MySQL会对操作信息进行记录,使用日志的方式进行记录,包括了bin log (文件级),redo log(文件级),undo log(内存级);将操作保存在了bin log(保存的是历史sql语句,用于进行数据库的数据持久化) 和redo log(便于宕机时,内存中的数据进行恢复)中,便于溯源;undo log是用于事务回滚的;

​ bin log 实现持久化的方式是:1.记录历史SQL语句;2.记录数据本身;使用1方案可以实现主从数据库;默认MySQL的bin log是被关闭的;

五、插入查询结果

5.1去重表数据

​ 1.先创建一个相同结构的表;2.将原表数据插入到新表中;3.重命名新表和旧表;

create table 表名1 like 表名2;#创建一个与表名2结构一样的表名1;
insert into 表名1 select distinct * from 表名2;
rename table 旧表名 to 新表名;

​ 最后一步重命名的原因是重命名的过程是原子的,当前面的准备工作就绪之后,使用重命名生效就可以保证上传成功或者更新文件之前,文件是安全的;所以上传一般使用的方式是先生成一个临时文件,然后临时文件上传成功之后,再将临时文件进行重命名;

六、聚合统计

6.1聚合函数

​ 使用聚合函数来辅助实现分组查询;聚合函数如下:

count(distinct 表达式)#返回查询到的数据数量;表达式:column ,*,distinct column,不受null的影响;
sum(distinct 表达式)#返回查询到的数据总和,不是数字没有意义;
avg(distinct 表达式)#返回查询到的数据平均值,不是数字没有意义;
max(distinct 表达式)#返回查询到的数据最大值,不是数字没有意义;
min(distinct 表达式)#返回查询到的数据最小值,不是数字没有意义;

​ select不仅可以对column进行取别名,也可以函数或者表达式取别名;

​ 需要注意的是,聚合后的数据是单一的,所以不同列的数据聚合成一行,关系必须是一对一;

6.2分组聚合查询

​ 分组的目的就是为了分组之后方便进行聚合统计;

select deptno ,max(sal)最高,avg(sal)平均 from emp group by deptno;

​ 分组指定列名,然后根据不同的行数据进行分组,分组后的条件数据,在组内一定是相同的,换句话说就是可以被聚合的;

having是对聚合后的数据进行筛选;使用having和group by实现;

select deptno 部门,avg(sal) 平均工资 from emp  group by deptno having 平均工资<2000;

6.3having和where的区别

​ 都是进行条件筛选,where是对具体的任意列进行条件筛选,而having是对分组聚合之后的结果进行条件筛选;

​ 执行顺序一般是:1.先确定表名;2.根据where子句进行条件筛选;3.进行聚合,没有分组默认整张表就是一个组;4.对聚合后的数据进行条件筛选;5.此时的数据就已经准备就绪,可以进行排序或者是分页;

​ 不仅仅从磁盘中导入到MySQL的表才是表结构,筛选并且显示出来的表在逻辑上也是表;换句话说就是MySQL下一切皆表

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

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

相关文章

【Spring】认识 IoC 容器和 Servlet 容器

认识 IoC 容器和 Servlet 容器 1.认识容器1.1 IoC 容器1.2 loC 的实现方法1.2.1 依赖注入1.2.2 依赖查找 1.3 认识 Servlet 容器 2.用 IoC 管理 Bean2.1 创建一个 Bean2.2 编写 User 的配置类2.3 编写测试类 3.用 Servlet 处理请求3.1 注册 Servlet 类3.2 开启 Servlet 支持 1.…

力扣:1738. 找出第 K 大的异或坐标值

1738. 找出第 K 大的异或坐标值 给你一个二维矩阵 matrix 和一个整数 k &#xff0c;矩阵大小为 m x n 由非负整数组成。 矩阵中坐标 (a, b) 的 值 可由对所有满足 0 < i < a < m 且 0 < j < b < n 的元素 matrix[i][j]&#xff08;下标从 0 开始计数&…

线程间通信和进程间通信

线程间通信 #include <iostream> #include <thread> #include <queue> #include <mutex> #include <condition_variable> #include <chrono>// 全局变量 std::queue<int> data_queue; std::mutex mtx; std::condition_variable cv_…

启动小程序F12窗口管理器

如何使用小程序F12任务窗口管理器教学流程 一、引言 小程序的开发者们&#xff0c;是否希望有一款工具能帮助你们更好地管理任务窗口&#xff1f; 二、前置准备 观看视频教程 访问B站视频链接&#xff1a;https://www.bilibili.com/video/BV1aa4y197UU/?spm_id_from333.9…

晶圆厂的PE转客户工程师前景怎么样?

知识星球&#xff08;星球名&#xff1a; 芯片制造与封测技术社区&#xff0c;星球号&#xff1a; 63559049&#xff09;里的学员问&#xff1a; 目前在晶圆厂做PE&#xff0c;倒班oncall压力太大把身体搞坏了&#xff0c;现在有一个design house的CE客户工程师的offer&…

java网络:过滤器修改请求头

目录 一、gateway的全局过滤器 二、web的OncePerRequestFilter以及常见过滤器Filter 三、过滤器排序 一、gateway的全局过滤器 Component Slf4j public class GatewayAuthFilter implements GlobalFilter, Ordered {Overridepublic Mono<Void> filter(ServerWebExchan…

跨境选品师不是神话:普通人也能轻松掌握,开启全球贸易新篇章!

随着互联网技术的飞速发展&#xff0c;跨境电商行业已成为全球经济的新增长点。在这个背景下&#xff0c;一个新兴的职业——跨境选品师&#xff0c;逐渐走进了人们的视野。那么&#xff0c;跨境选品师究竟是做什么的?普通人又该如何成为优秀的跨境选品师呢? 一、跨境选品师的…

ABAQUS应用07-实现拉伸和压缩刚度不同的弹簧建模

文章目录 0、背景描述1、步骤 0、背景描述 到目前为止&#xff0c;本文的内容我还没有具体实践过&#xff0c;但是个人认为后期是会用到的。比如说&#xff0c;对于风电机组地基转动刚度的设置&#xff0c;土体就是一种拉压刚度并不相同的材料。所以现在先记录下来&#xff0c…

Python——字典删除键值的方法

del dict[key] # 删除dict字典里的键值

如何用Java实现SpringCloud Alibaba Sentinel的熔断功能?

在Java中使用Spring Cloud Alibaba Sentinel实现熔断功能的步骤如下&#xff1a; 添加依赖 在项目的pom.xml文件中添加Spring Cloud Alibaba Sentinel的依赖&#xff1a; <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud…

Java进阶学习笔记24——Object类

Object类: Object类是Java中所有类的祖宗类&#xff0c;因此&#xff0c;Java中所有类的对象都可以直接使用Object类中提供的一些方法。 所有类都是Object类的子孙类。 API文档&#xff1a; Object类的成员方法&#xff1a; Object类的常见方法&#xff1a; Student类&…

Arthas反编译与重新加载class

一、背景 因为其他研发部门同事给的产品jar包存在一个问题&#xff0c;就是http底层的超时时间默认为60s&#xff0c;但是最近调用外部接口同步数据&#xff0c;这个数据量太大导致超时超过60s&#xff0c;每次同步都不成功。但是客户目前对此情况特别不满意&#xff0c;需要紧…

【路径规划】基于飞蛾搜索算法实现复杂城市地形下无人机避障三维航迹规划

研究背景 复杂城市地形下无人机避障三维航迹规划是无人机技术领域的一个重要研究方向。无人机在城市环境中的广泛应用,如快递配送、城市监测和搜救等任务,对其航迹规划和避障能力提出了挑战。 研究背景包括以下方面: 无人机的快速发展:无人机技术在近年来得到了迅猛发展…

勒索病毒的策略与建议

随着网络技术的快速发展&#xff0c;勒索病毒攻击成为全球范围内日益严重的网络安全威胁。勒索病毒通过加密用户文件或锁定系统来勒索赎金&#xff0c;给个人和企业带来了巨大的损失。因此&#xff0c;了解如何应对勒索病毒攻击至关重要。本文将概述一些有效的防范措施和应对策…

2024电工杯数学建模B题完整论文讲解(含每一问python代码+数据)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了2024电工杯数学建模B题大学生平衡膳食食谱的优化设计及评价完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 …

Linux网络编程:HTTPS协议

目录 1.预备知识 1.1.加密和解密 1.2.常见加密方式 1.2.1.对称加密 1.2.2.非对称加密 ​编辑 1.3.数据摘要&#xff08;数据指纹&#xff09;和数据签名 1.4.证书 1.4.1.CA认证 1.4.2.证书和数字签名 2.HTTPS协议 2.1.自行设计HTTPS加密方案 2.1.1.只使用对称加密 …

uniapp使用uni.chooseImage选择图片后对其是否符合所需的图片大小和类型进行校验

uni.chooseImage的返回值在H5平台和其他平台的返回值有所差异&#xff0c;具体差异看下图 根据图片可以看出要想判断上传的文件类型是不能直接使用type进行判断的&#xff0c;所以我使用截取字符串的形式来判断&#xff0c;当前上传图片的后缀名是否符合所需要求。 要求&#…

驱动与系统学习网址

DRM&#xff08;Direct Rendering Manager&#xff09;学习简介-CSDN博客 Android Qcom Display学习(零)-CSDN博客 https://blog.csdn.net/hexiaolong2009/category_9705063.htmlhttps://blog.csdn.net/hexiaolong2009/category_9705063.htmlRender Hell —— 史上最通俗易懂…

区间合并-leetcode合并石头的最低成本-XMUOJ元素共鸣:深层次的唤醒

题目 思路 话不多说&#xff0c;直接上代码 附上INT_MAX和INT_MIN 【C】详解 INT_MAX 和 INT_MIN&#xff08;INT_MAX 和 INT_MIN是什么&#xff1f;它们的用途是什么&#xff1f;如何防止溢出&#xff1f;&#xff09;_c int max-CSDN博客 代码 /* leetcode合并石头的最低…

clone方法总结Java

Java中Object类当中有许多方法&#xff0c;如图所示&#xff1a; clone方法就是其中一种&#xff0c;分为浅拷贝&#xff0c;深拷贝举一个例子&#xff1a; 浅拷贝&#xff1a; 在Person类当中右键鼠标然后&#xff0c;选中Generate&#xff1a; 然后重写clone方法 protecte…