【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…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
js 设置3秒后执行
如何在JavaScript中延迟3秒执行操作 在JavaScript中,要设置一个操作在指定延迟后(例如3秒)执行,可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法,它接受两个参数: 要执行的函数&…...
13.10 LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析
LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析 LanguageMentor 对话式训练系统架构与实现 关键词:多轮对话系统设计、场景化提示工程、情感识别优化、LangGraph 状态管理、Ollama 私有化部署 1. 对话训练系统技术架构 采用四层架构实现高扩展性的对话训练…...
【Qt】控件 QWidget
控件 QWidget 一. 控件概述二. QWidget 的核心属性可用状态:enabled几何:geometrywindows frame 窗口框架的影响 窗口标题:windowTitle窗口图标:windowIconqrc 机制 窗口不透明度:windowOpacity光标:cursor…...
基于谷歌ADK的 智能产品推荐系统(2): 模块功能详解
在我的上一篇博客:基于谷歌ADK的 智能产品推荐系统(1): 功能简介-CSDN博客 中我们介绍了个性化购物 Agent 项目,该项目展示了一个强大的框架,旨在模拟和实现在线购物环境中的智能导购。它不仅仅是一个简单的聊天机器人,更是一个集…...

