【MySQL】——用一文领悟表的增删查改
目录
前言
🍃1.表的增加
🍙1.1增——insert
🍙1.2插入否则更新
🍤1.2.1影响行说明
🍂2.表的查询
🍘2.1查询——select
🍘2.2特殊表查询
🍥2.2.1添加表达式
🍥2.2.2起别名
🍥2.2.3结果去重
🍘2.3where条件
🍘2.4结果排序——order by
🍘2.5筛选分页结果
🐳3.表的删除
🧊️3.1删除——delete
🧊️3.2截断——truncate
🧊️3.3 delete和truncate的区别
✨4.表的更新
🍁4.1更新——update
总结
前言
在🔥《库操作&&表操作》🔥一文中,我们已经知道如何对表进行创建、修改、删除
但那是对表的结构而言,具体怎么对表的数据进行操作,我们还没有讲解
这也是本章的介绍对象——表的增删查改
🍃1.表的增加
🍙1.1增——insert
insert用于向表中插入新的行数据记录
插入的行数据记录,并不是依照列一个一个严格插入的
可以选择全插入,也可以选择一些列进行插入
语法:
insert into 表名(列名1,列名2,......) values(列值1,列值2,......);
特殊语法:
- 全列插入,直接省略括号中列名
insert into 表名 values(列值1,列值2,......);
- 多列插入,每个行数据用()包裹,用','分离
insert into 表名(列名1,列名2,......) values(列值1,列值2,......),(列值1,列值2,......),......;
示例:
创建一张表students
create table students(-> id int unsigned primary key auto_increment,-> sn int not NULL unique,-> name varchar(20) not null,-> qq varchar(20)-> );
指定列插入一条数据记录
全列插入一条数据记录
多行插入多条数据记录
查看表
🍙1.2插入否则更新
当我们想要插入的数据记录,在表中已经存在时,会插入失败
这时候,我们可以选择将表中原本的数据记录更新成我们想要插入的数据记录
即发生数据冲突就更新
一般冲突分为两种
- 主键冲突
- 唯一键冲突
🤔如何解决?
💡在数据冲突的时候,选择性地进行同步更新
语法:
insert ....... duplicate key update 列名1=列值1,列名2=列值2,......;
示例:
插入的数据记录产生冲突,选择更新
查看表👇
🍤1.2.1影响行说明
当表中有数据冲突,我们进行选择性更新时
可以发现,有两行数据被影响了
当我们插入的数据不发生数据冲突
只有一行被影响
当我们选择性更新,数据冲突的值和update的值相等
没有行被影响
说明:
- 0 row affected:表中有冲突数据,但冲突数据和update的值相等
- 1 row affected:表中没有冲突数据,数据被插入
- 2 row affected:表中有冲突数据,并且数据已经被更新
🍂2.表的查询
🍘2.1查询——select
一般用来显示表
但实际上,select只是将结果进行显示,并不是单独对表进行显示
如:select 1+1;
全列查询
语法 :
select * from 表名;
说明:
我们一般不支持全列查询
正常工作中的表的数据记录,都多得可怕,并不是我们现在编写的寥寥几行
查询的列越多,意味着传输的数据量越大,速度越慢
并且可能会影响到索引的使用
指定列查询
语法:
select 列名1,列名2,...... from 表名;
说明:
指定列查询的时候
显示是按照select后面的列名顺序进行显示,而不是按照创建表时,定义列名的顺序
🍘2.2特殊表查询
🍥2.2.1添加表达式
select可以显示表达式的结果
进行表的查询的时候,如果有需求,我们可以添加表达式
示例:
现在有一张成绩表
表上的信息只有每个人的姓名、语文成绩、数学成绩、英语成绩
现在,我希望了解每个人的三科总成绩
我需要对表多添加一列总成绩吗?
直接在select 后面添加表达式即可
select name,chinese,english,math,math+english+chinese from exam_result;
结果
这样,简单粗暴了很多
🍥2.2.2起别名
有些时候,显示的列名过长,会造成显示不美观
为了让显示的效果更好,更美观,我们可以对复杂的列名另起别名
语法:
select 列名1 as 别名1,....... from 表名;
- select只管显示结果,对列起别名后,显示时使用别名进行显示
示例:
select name,chinese,english,math,math+english+chinese as '总分' from exam_result;
结果👇
🍥2.2.3结果去重
当进行显示的时候,会发现有重复的数据
有时候重复数据我们并不希望看到,就可以对显示结果进行去重
语法:
select distinct 列名,...... from 表名;
- 将关键字distinct添加在指定列名前,显示该列数据时就会自动去重
示例:
98重复了
我们现在再次select,并对math进行去重
显示的数据当中,已经没有重复数据了。
🍘2.3where条件
如果说 select * from 表名 中的from,是为了定位表的
那么where条件,则是用来定位表中确切的数据记录
语法:
select ...... from where 条件;
where后面的条件,一般需要配合一些运算符
比较运算符
运算符 | 说明 |
>,>=,<,<= | 大于,大于等于,小于,小于等于 |
= | 等于,NULL不安全,例如NULL=NULL的结果是NULL |
<=> | 等于,NULL安全,例如NULL<=>NULL的结果是TRUE(1) |
!=,<> | 不等于 |
between a0 and a1 | 范围匹配[a0,a1],如果a0 <=value<=a1,返回TRUE(1) |
in(option,...) | 如果是option中的任意一个,返回TRUE(1) |
is null | 是NULL |
is not null | 不是NULL |
like | 模糊匹配,%表示任意多个(包括零个)任意字符;_表示一个字符 |
逻辑运算符
运算符 | 说明 |
and | 多个条件必须都为TRUE(1),结果才是TRUE(1) |
or | 任意一个条件为TRUE(1),结果为TRUE(1) |
not | 条件为TRUE(1),结果为FALSE(0) |
示例:
查询英语不及格的同学以及英语成绩(<60)
查询语文成绩在[80,90]之间的同学以及语文成绩

🍘2.4结果排序——order by
我们需要对一些数据进行排序的时候,就需要使用order by
语法:
select ...... from 表名 ...... order by 列名 [asc|desc];
- asc为升序排序,从小到大
- desc为降序,从大到小
- 默认为asc
示例:
将同学及数学成绩,按数学成绩升序显示
从小到大依次显示,没有指定排序,则默认为升序
查询同学们各门成绩,依次按 数学降序,英语升序、语文升序的方式显示
发现,即使唐三藏的英语成绩和语文成绩都很差,但还是在第一位
因为,多列排序,排序优先级按照书写顺序
💣注意:没有order by子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序
🍘2.5筛选分页结果
大厂中的数据库,存储的信息量是很大的,所以一般几千行起步
我们可以用where进行筛选
但有些时候,我们也必须仔细查看
我们可以使用 limit 对数据进行分页,减少select一次性显示的数据
语法:
-- 起始下标为 0
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n
-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
示例:
第一页,显示从0到第3条数据记录
第二页,显示从4开始到第6条数据记录
第三页,显示从7开始到第9条数据记录
💣注意:当剩余记录不满足分页需要的数据记录条数时,显示剩余条数即可
🐳3.表的删除
🧊️3.1删除——delete
当我们不需要表中的每个行数据记录时,可以使用delete进行删除
语法:
delete from 表名 where 条件;
- 删除表中where指定的行数据记录
- where 条件 可以省略
示例:删除孙悟空同学的考试成绩
先查看一下孙悟空同学的考试成绩
将孙悟空同学的考试成绩删除
再次查看孙悟空同学的考试成绩
Empty 表示孙悟空的考试成绩没有了,已经被删除了
💣注意:使用delete进行删除的时候,一旦省略where 条件,将删除整张表的数据
🧊️3.2截断——truncate
当你想删除整张表的数据时
不仅可以用delete,也可以使用teuncate
语法:
truncate table 表名;
- truncate进行删除时,并没有where进行筛选,就是直接删除整张表的数据
🧊️3.3 delete和truncate的区别
truncate是用来删除整张表的,delete也可以用来删除整张表
但为什么一定要多一个truncate拥有重复的功能?
区别:
- delete删除整张表时,不会重置主键的AUTO_INCREMENT值
- truncate删除整张表时,会重置主键的AUTO_INCREMENT值
验证一下:
现在有一个表test
它的列id拥有主键约束,并且自增长
目前主键的AUTO_INCREMNT值为127
使用delete对整张表进行删除
再次查看主键的AUTO_INCREMNT值
仍为127,说明delete删除整张表的数据,并不会重置AUTO_INCREMNT的值
现在使用truncate对表进行重复删除
再次查看主键的AUTO_INCREMNT值
发现:AUTO_INCREMNT直接消失了,代表被重置了!
说明:
truncate在删除整张表数据的同时,重置主键的自增长值
delete在删除整张表数据的同时,不会重置主键的自增长值
为什么会这样?😣
💡delete的删除,是真正地对内容删除,将内容进行清空
💡truncate的删除,并不是真正地对内容删除,并不对内容进行操作
以下为个人想法:
表的本质,就是一个文件
truncate对其删除,更像是将其状态设置为已删除
当表重新被插入数据的时候,直接覆盖原本状态为已删除的数据即可
整张表已经被设置为已删除
后面重新插入数据,也是从头开始插入
所以,在将表的状态设置为已删除的同时,也会重置主键自增长的值!
✨4.表的更新
🍁4.1更新——update
使用update可以对表中的数据进行更新,也是修改
语法:
update 表名 set 列名1=expr1,...... where 条件;
- 将表中where指定的数据记录的列名1的值更改为expr1
- where 可以省略
示例:将孙悟空通信的数学成绩变更为80分
先查看一下孙悟空同学的数学成绩
将孙悟空同学的数学成绩更新为80分
结果👇
💣注意:一般进行更新的时候,建议不要省略where,一旦省略,将变成全表更新!
总结
本文章带大家认识了表的增删查改的操作
但要彻底熟悉,需要勤加练习,多多实操才是
✨如果本文有帮助,点个赞发个评论鼓励一下✨
相关文章:

【MySQL】——用一文领悟表的增删查改
目录 前言 🍃1.表的增加 🍙1.1增——insert 🍙1.2插入否则更新 🍤1.2.1影响行说明 🍂2.表的查询 🍘2.1查询——select 🍘2.2特殊表查询 🍥2.2.1添加表达式 🍥…...
Zabbix监控Oracle 19c数据库完整配置指南
Zabbix监控Oracle 19c数据库完整配置指南 本文将详细介绍如何使用Zabbix配置Oracle 19c数据库监控,包括安装、配置、问题排查等全过程。本指南适合新手独立完成配置。 1. 环境准备 1.1 系统要求 Oracle 19c数据库服务器Zabbix服务器(版本5.0或更高&a…...

静态路由与交换机配置实验
1.建立网络拓扑 添加2台计算机,标签名为PC0、PC1;添加2台二层交换机2960,标签名为S0、S1;添加2台路由器2811,标签名为R0、R1;交换机划分的VLAN及端口根据如下拓扑图,使用直通线、DCE串口线连接…...
【jvm】讲讲jvm中的gc
目录 1. 说明2. 主要算法2.1 标记-清除算法2.2 复制算法2.3 标记-整理算法3. 主要回收器3.1 Serial GC3.2 Parallel GC3.3 CMS(Concurrent Mark-Sweep)GC3.4 G1(Garbage-First)GC 4. 触发条件4.1 Minor GC(Young GC&am…...
openlayers地图事件
OpenLayers是一个开源的JavaScript库,用于在Web上创建交互式地图。它提供了许多地图事件,使用户可以与地图进行交互。以下是OpenLayers常用的地图事件: 1. click:当用户单击地图时触发该事件。 2. dblclick:当用户双…...
杂记9---一些场景git操作汇总
背景:不同项目需求,所需要git操作集合,不太一样,这里汇总记录一下。 场景1:给本地项目添加到远程仓库的新建分支上 把本地节点保存在自己库的一个分支: git init git remote add origin xxx.git 远程仓库…...

Mysql索引,聚簇索引,非聚簇索引,回表查询
什么是索引 数据库索引是为了实现高效数据查询的一种有序的数据数据结构,类似于书的目录,通过目录可以快速的定位到想要的数据,因为一张表中的数据会有很多,如果直接去表中检索数据效率会很低,所以需要为表中的数据建立…...

【优选算法 二分查找】二分查找算法入门详解:二分查找小专题
x 的平方根 题目解析 算法原理 解法一: 暴力解法 如果要求一个数(x)的平方根,可以从 0 往后枚举,直到有一个数(a),a^2<x,(a1)^2>x,a即为所求; 解法二:二分查找 …...

如何将CSDN博客下载为PDF文件
1.打开CSDN文章内容 2.按键盘上的f12键(或者右键—审查元素)进入浏览器调试模式,点击控制台(Console)进入控制台 3.在控制台输入以下代码,回车 4.在弹出的打印页面中将布局设置成横向,纵向会…...

pdf转word/markdown等格式——MinerU的部署:2024最新的智能数据提取工具
一、简介 MinerU是开源、高质量的数据提取工具,支持多源数据、深度挖掘、自定义规则、快速提取等。含数据采集、处理、存储模块及用户界面,适用于学术、商业、金融、法律等多领域,提高数据获取效率。一站式、开源、高质量的数据提取工具&…...

2024年下半年网络工程师案例分析真题及答案解析
2024年下半年网络工程师案例分析真题及答案解析 试题一(15分) [说明] 公司为某科技园区的不同企业提供网络服务,不同企业的业务有所不同,每个企业因业务需要在不同的地点有多个分支机构。其拓扑结构如图1所示。企业用户通过楼层接入交换机、楼栋汇聚交换机和区域交换机接…...

English phonetic symbol
英语音标发音表-英语48个音标在线读 (jiwake.com) 【英语音标教程】从此学会国际音标|英式音标|BBC音标教程全解_哔哩哔哩_bilibili 元音 单元音 /iː/,/ɪ/ 这两个音不是发音长短的区别, /uː/ /ʊ/ 上面那个就正常读,下面那个她的气大概是往你斜…...
普及组集训--图论最短路径设分层图
P4568 [JLOI2011] 飞行路线 - 洛谷 | 计算机科学教育新生态 可以设置分层图:(伪代码) E(u,v)w;无向图 add(u,v,w),add(v,u,w); for(j1~k){add(ujn,vjn,w);add(vjn,ujn,w);add(ujn-j,vjn-j,0);add(vjn-j,ujn-j,0); } add(ujn-j,vjn-j,0); add(vjn-j,uj…...

SYN6288语音合成模块使用说明(MicroPython、STM32、Arduino)
模块介绍 SYN6288中文语音合成模块是北京宇音天下科技有限公司推出的语音合成模块。该模块通过串口接收主控传来的语音编码后,可自动进行自然流畅的中文语音播报。 注:SYN6288模块无法播报英文单词和句子,只能按字母播报英文 ;而…...

Spring完整知识三(完结)
Spring集成MyBatis 注意 Spring注解形式集成MyBatis时,若SQL语句比较复杂则仍采用映射文件形式书写SQL语句;反之则用注解形式书写SQL语句,具体可详见Spring注解形式 环境准备相同步骤 Step1: 导入相关坐标,完整pom.…...

保姆级教程Docker部署Redis镜像
目录 1、创建挂载目录和配置文件 2、运行Redis镜像 3、查看redis运行状态 1、创建挂载目录和配置文件 # 创建宿主机Redis配置文件存放目录 sudo mkdir -p /data/docker/redis/conf# 创建Redis配置文件 cd /data/docker/redis/conf sudo touch redis.conf 到Github上找到Redi…...

子类有多个父类的情况下Super不支持指定父类来调用方法
1、Super使用方法 super()函数在Python中用于调用父类的方法。它返回一个代理对象,可以通过该对象调用父类的方法。 要使用super()方法,需要在子类的方法中调用super(),并指定子类本身以及方法的名称。这样就可以在子类中调用父类的方法。 …...

AI大模型ollama结合Open-webui
AI大模型Ollama结合Open-webui 作者:行癫(盗版必究) 一:认识 Ollama 1.什么是Ollama Ollama是一个开源的 LLM(大型语言模型)服务工具,用于简化在本地运行大语言模型,降低使用大语言模型的门槛,使得大模型的开发者、研究人员和爱好者能够在本地环境快速实验、管理和…...

RK3568笔记2:NOR_Flash和NAND_Flash与SDMMC和eMMC
1. 本质区别 特性NOR Flash/NAND FlashSDMMC/eMMC定义基础存储器(原始闪存芯片)基于闪存芯片的存储模块,带有控制器组成结构只有原始存储芯片存储芯片 控制器控制方式需主机直接控制,读写逻辑由主机完成内置控制器,主…...
windows python qt5 QChartView画折线图
环境:windows pyqt5 ,用QCartView画折线图 环境需要提前安装 pip install PyQtChart 折线图随着时间推移会不断移动,主动更新x轴坐标 import sys from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout from PyQt5.QtChart imp…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...

6.9-QT模拟计算器
源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...