【MySQL】——​​用一文领悟表的增删查改

news2025/2/27 17:22:27

目录

前言

🍃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]之间的同学以及语文成绩

数学成绩是 58 或者 59 或者 98 或者 99 分的同学以及数学成绩

🍘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,一旦省略,将变成全表更新!

总结

本文章带大家认识了表的增删查改的操作

但要彻底熟悉,需要勤加练习,多多实操才是

✨如果本文有帮助,点个赞发个评论鼓励一下✨

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

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

相关文章

福昕PDF低代码平台

福昕PDF低代码平台简介 福昕PDF 低代码平台是一款创新的工具&#xff0c;旨在简化PDF处理和管理的流程。通过这个平台&#xff0c;用户可以通过简单的拖拽界面上的按钮&#xff0c;轻松完成对Cloud API的调用工作流&#xff0c;而无需编写复杂的代码。这使得即使没有编程经验的…

【数据结构实战】二叉树——从根节点到叶节点

&#x1f3dd;️专栏&#xff1a; 【数据结构实战篇】 &#x1f305;主页&#xff1a; f狐o狸x 目录 一、堆的应用 1.1 堆排序 1.2 topk问题 二、二叉树 2.1 二叉树链式结构的实现 2.2 二叉树的遍历 2.2.1 前序、中序以及后序遍历 2.2.2 层序遍历 2.3 节点个数以及高度等 2.3.…

命令模式的理解和实践

在软件开发中&#xff0c;设计模式是开发者们经过长期实践总结出来的、可复用的解决方案&#xff0c;用于解决常见的设计问题。命令模式&#xff08;Command Pattern&#xff09;是行为型设计模式之一&#xff0c;它通过将一个请求封装成一个对象&#xff0c;从而允许用户用不同…

vue-router查漏补缺

一、动态路由匹配 1.带参数的动态路由匹配 import User from ./User.vue// 这些都会传递给 createRouter const routes [// 动态字段以冒号开始{ path: /users/:efg, component: User }, ]这种方式的路由会匹配到/users/abc或者/users/123,路径参数用冒号:表示&#xff0c;并…

Ubuntu22.04深度学习环境安装【Anaconda+Pycharm】

anaconda可以提供多个独立的虚拟环境&#xff0c;方便我们学习深度学习&#xff08;比如复现论文&#xff09;&#xff1b; Pycharm编辑器可以高效的编写python代码&#xff0c;也是一个很不错的工具。 下面就记录下Ubuntu22.04的安装流程&#xff1a; 1.Anaconda安装 下载Ana…

三维测量与建模笔记 - 6.2 结构光三维成像简介

简介 双目视觉系统中&#xff0c;找到左右图像中的同名点是很困难的。 即便是经过了极线校正&#xff0c;也存在很多问题比如高光等造成无匹配。对于结构光方案来说&#xff0c;找到同名点的过程会相对简单些。 结构光方案中&#xff0c;会增加一个投射器&#xff0c;将编码后的…

this version of the Java Runtime only recognizes class file versions up to 52.0

问题描述 Exception in thread "main" java.lang.UnsupportedClassVersionError: com/xxx/Main has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versi…

【开源免费】基于SpringBoot+Vue.JS在线办公系统(JAVA毕业设计)

本文项目编号 T 001 &#xff0c;文末自助获取源码 \color{red}{T001&#xff0c;文末自助获取源码} T001&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

【WRF理论第十三期】详细介绍 Registry 的作用、结构和内容

目录 1. Introduction&#xff1a;介绍 Registry 的作用和功能。2. Registry Contents&#xff1a;详细描述 Registry 的结构和内容&#xff0c;包括各个部分的条目类型。2.1. DIMSPEC ENTRIES&#xff08;维度规格条目&#xff09;2.2. STATE ENTRIES&#xff08;状态变量条目…

Redis篇-4--原理篇3--Redis发布/订阅(Pub/Sub)

1、概述 Redis 发布/订阅&#xff08;Publish/Subscribe&#xff0c;简称 Pub/Sub&#xff09;是一种消息传递模式&#xff0c;允许客户端订阅一个或多个通道&#xff08;channel&#xff09;&#xff0c;并接收其他客户端发布到这些通道的消息。 2、Redis 发布/订阅的主要概…

[大数据]Hudi编译集成

1. Hudi概述 1.1 Hudi简介 What is Apache Hudi Apache Hudi is the next generation streaming data lake platform. Apache Hudi brings core warehouse and database functionality directly to a data lake. Hudi provides tables, transactions, efficient upserts/dele…

Redis 数据结构(一)—字符串、哈希表、列表

Redis&#xff08;版本7.0&#xff09;的数据结构主要包括字符串&#xff08;String&#xff09;、哈希表&#xff08;Hash&#xff09;、列表&#xff08;List&#xff09;、集合&#xff08;Set&#xff09;、有序集合&#xff08;Sorted Set&#xff09;、超日志&#xff08…

Cisco Packet Tracer | Cisco Packet Tracer - VLAN 实验 - 交换机的 VLAN 划分

关注这个工具的其它相关笔记&#xff1a;Cisco Packet Tracer —— 使用教程合集-CSDN博客 0x01&#xff1a;VLAN 划分 - 单个交换机 0x0101&#xff1a;拓扑搭建流程 从软件底部拖出一台交换机&#xff08;笔者选择的型号是 2960 IOS15&#xff09;&#xff1a; 然后再拖出四…

元宇宙时代的社交平台:Facebook的愿景与实践

随着科技的不断进步&#xff0c;元宇宙&#xff08;Metaverse&#xff09;这一概念逐渐走进了人们的视野。作为全球最大的社交平台之一&#xff0c;Facebook&#xff08;现Meta&#xff09;在这场元宇宙革命中扮演着重要角色。Meta不仅在不断扩展其社交平台的边界&#xff0c;还…

Nignx部署Java服务测试使用的Spring Boot项目Demo

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

计算机网络ENSP课设--三层架构企业网络

本课程设计搭建一个小型互联网&#xff0c;并模拟Internet的典型Web服务过程。通过此次课程设计&#xff0c;可以进一步理解Internet的工作原理和协议过程&#xff0c;并提高综合知识的运用能力和分析能力。具体目标包括&#xff1a; &#xff08;1&#xff09;掌握网络拓扑的…

记一次:使用C#创建一个串口工具

前言&#xff1a;公司的上位机打不开串口&#xff0c;发送的时候设备总是关机&#xff0c;因为和这个同事关系比较好&#xff0c;编写这款软件是用C#编写的&#xff0c;于是乎帮着解决了一下&#xff08;是真解决了&#xff09;&#xff0c;然后整理了一下自己的笔记 一、开发…

SQL 获取今天的当月开始结束范围:

使用 GETDATE() 结合 DATEADD() 和 DATEDIFF() 函数来获取当前月的开始和结束时间范围。以下是实现当前月时间范围查询的 SQL&#xff1a; FDATE > DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) FDATE < DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) 1, 0) …

利用Java爬虫MinC根据ID获取商品详情的完整指南

在当今数字化时代&#xff0c;获取商品详情数据对于市场分析、价格监控和竞争对手分析至关重要。Java作为一种强大且广泛使用的编程语言&#xff0c;非常适合开发复杂的爬虫系统。本文将详细介绍如何利用Java编写爬虫程序来根据商品ID获取商品详情&#xff0c;并提供完整的代码…

RabbitMQ-入门

RabbitMQ-入门 基本说明 AMQP协议&#xff08;高消息队列协议&#xff1a;Advanced Message Queuing Protocol&#xff09;&#xff1a;https://www.rabbitmq.com/tutorials/amqp-concepts.html 基础组件术语 生产者&#xff08;Publisher&#xff09;&#xff1a;发消息到某…