【MySQL】第二弹——MySQL表的增删改查(CRUD)初阶
文章目录
- 🎓一. CRUD
- 🎓二. 新增(Create)
- 🎓三. 查询(Rertieve)
- 📖1. 全列查询
- 📖2. 指定列查询
- 📖3. 查询带有表达式
- 📖4. 起别名查询(as ' ')
- 📖 5. 去重查询(distinct)
- 📖6. 排序查询(order by)
- 📖7. 条件查询(where)
- <font color= #32CD32 size=3> 1.比较运算符
- <font color= #32CD32 size=3> 2.逻辑运算符
- 📖8. 分页查询
- 🎓四. 修改(Update)
- 🎓五. 删除(Delete)
- 总结
🎓一. CRUD
- CURD: Create,Retrieve,Update,Delete
- Create : 新增数据
- Retrieve : 查询数据
- Update : 修改数据
- Delete : 删除数据
MySQL的工作就是组织管理数据,先保存,保存好了后好进行增删改查,增删改查的前提是已经把数据库创建好,并且选中数据库,表也创建就绪
- 如何注释?
在SQL中可以使用“–空格+描述”来表示注释说明
🎓二. 新增(Create)
insert into 表名 values(值, 值, 值…);
注意此处的值的个数要和表的列数匹配,值的类型也要和列的类型匹配(不匹配就会报错!)
这里也体现了关系型数据库的一个优势:对数据进行更严格的校验检查,更容易发现问题
①我们在库里创建一个学生表

②查看表的结构

③新增数据

注意:在SQL中可以单引号也可以用双引号,表示字符串,两种都可以,这两个是等价关系,在SQL中没有"字符类型",只有字符串类型,所以单引号也可以表示字符串
注意:这里表的列数不匹配或是类型不匹配,都会报错

出现ERROR意味着当前的操作是不生效的
- 扩展
这里可以插入中文数据

数据库表示中文需要明确字符编码,MySQL默认的字符集叫做拉丁文,不支持中文,为了可以存储,就需要把字符集改为UTF-8。我们这里直接修改MySQL的配置文件,直接把字符集改为UTF-8
至此MySQL配置修改就彻底结束了,我们继续insert的探讨
insert插入的时候可以指定列进行插入,不一定非得把这一行的所有列都插入数据,可以想插入几列就插入几列

名字列插入王五,其他列未被插入,比如id列,就会填入默认值NULL
insert语句也可以依次插入多条记录,在values后面,写多组(),每个()之间使用逗号分割
mysql> insert into student values(1,"zhangsan"),(2,"lisi"),(3,"wangwu");
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
MySQL中,一次插入多条记录比不同的一条记录多次插入要快得多!
- 主要是因为MySQL是一个客户端/服务器结构的程序,每次在客户端里输入的命令,都是通过网络来进行输入的

- 数据库服务器需要解析请求,获取到其中的sql,解析sql执行相关操作,并且把操作结果返回给客户端
- 如果要是一次插入一条,分成多次插入就会有多个请求/响应,如果要是一次插入多条,就一次请求/响应就够了
- 所以还是一次请求/响应 快多了
插入是SQL中最简单的操作,也是最常用的操作
🎓三. 查询(Rertieve)
查询是SQL中最重要也是最复杂的操作,这里我们先介绍的是最简单的查询
📖1. 全列查询
- 直接把整个表的数据查询出来
select * from 表名;
其中 * 是通配符 表示匹配任意的列(也就是所有的列)

注意:要理解这里的执行过程,客户端和服务器之间通过网络进行通信
这一组结果是通过网络返回的,最终呈现在客户端上,这些数据是服务器筛选得到的数据结果,客户端也是以表格的形式进行呈现,但是大家不要把客户端显示的这个表格视为是服务器上数据的本体,这个客户端上显示的表格是个“临时表”
问题:如果当前数据库的数据特别多,执行select * 会发生什么?
- 服务器要先读取磁盘,把这些数据都查询出来,再通过网卡把数据传输给客户端,由于数据量非常大,极有可能就把磁盘IO(input output)吃满或者把网络带宽吃满。最直观的感受就是会感受到卡顿,至于卡多久,不明确! 不可控!
- 所以在我们的生产环境中这也是一个比较危险的操作,数据很多可能会达到TB级别,磁盘资源和网络资源在服务器上都是非常紧缺的资源,一定要珍惜我们有限的资源,全列查询可能会将服务器资源吃光,其他的操作就要等待当前操作执行完成,才能继续执行
在执行一些SQL的时候如果执行的时间比较长,随时可以按 Ctrl + c 来中断,以免造成不必要的损失
📖2. 指定列查询
select 列名,列名,列名… from 表名; //需要查询几个列,就写几个列

当我们省略掉一些不必要的列的时候,就可以节省大量的磁盘IO和网络带宽
同样的,MySQL是客户端服务器结构的程序,在此处看到的这个表结果,也同样是 " 临时表 " 只是在客户端这里显示成这个样子,而不是说服务器上就真有一个这样的表,里面只存了id列
select所有的操作结果都是临时表,都不会影响到数据库服务器原有的数据!
📖3. 查询带有表达式

创建一个表exam 设置属性 插入数据


可以将所有的成绩加在一起,起别名为总分
别名最规范的写法是 : as ’ 总分 ’
给结果集中的字段起别名:select 列名[as] 别名[, 列名]… from 表名;

📖4. 起别名查询(as ’ ')
select name, chinese + math + english as ‘total’ from exam;

给结果集中的字段起别名:select 列名[as] 别名[, 列名]… from 表名;
📖 5. 去重查询(distinct)
- 把查询结果相同的记录,合并为一条记录
select distinct 列名 from 表名;



- 去重时,只有查询结果中所有的列都相同才会被认定为重复记录
- 去重后,重复记录只保留一条
📖6. 排序查询(order by)
- 查询过程中,对于查询到的数据进行排序(只是针对临时表,对于数据库原本的数据没有影响)
select 列名 from 表名 order by 列名[ ASC | DESC];
排序规则:1.升序 ASC 2.降序 DESC 不写默认为升序


不推荐这种写法,我们强烈建议明确指定排序规则
没有order by 子句时,返回结果集按哪个字段进行排序?
没有指定order by 子句时,永远不要依赖默认排序返回结果集顺序
不同版本的 MYSQL 是根据哪个字段进行排序的 是不明确的
依赖某个排序规则时,就明确子句中排序字段
在SQL中,如果NULL和其他类型进行混合运算结果依然那是NULL
NULL 数据排序,视为比任何值都小,升序排在最上面,降序排在最下面

MySQL中NULL比较特殊
1.无论和什么值进行运算,返回值都是NULL
2.NULL始终被判定为FALSE
3.NULL的值不是我们以前学习的其他编程语言的0在MySQL他就是NULL
- 可以对多个字段进行排序,排序的优先级与书写顺序相关
- 可以为每个字段指定不同的排序规则

📖7. 条件查询(where)
- 指定条件,对于查询结果进行筛选
- 通过一写运算符,过滤掉不符合条件的记录,符合条件的发那会给用户
select * from 表名 where 条件;
1.比较运算符


下面进行几个示例:



2.逻辑运算符


逻辑运算符有优先级,不建议记忆,在使用时通过小括号的方式,手动指定优先级,这样可读性也会高一点
使用where条件的语法:select * from 表名 where 列名/表达式 运算符 条件;
条件查询时,首先要确定好给哪个列设置相应的条件
- 做几个练习:
- 1.查询英语不及格的同学及英语成绩

- 2.查询语文成绩好于英语成绩的同学

- 3.查询总分再200以下的同学

<出现这种现象和MYSQL内部实现有关,换句话说和MYSQL执行SQL语句的顺序相关>
1.如果要在数据中查询某些数据,首先要确定表,即先执行from
2.查询过程中,要根据指定的查询过程过滤符合条件的数据,这时执行where子句,也就是说执行where时total还没有被定义,所以不能使用别名
3.执行select后面指定的列,这些列加入到最终结果集中
4,执行order by 子句中指定的列名和排序规则进行最后的排序
- 4.查询语文成绩>80,且英语>80的同学

- 5.查询语文>80 或 英语>80 的同学

or 只要一个条件满足就符合整个查询条件
观察and 和 or 的优先级

-
6.查询语文成绩在[80,90]的同学及语文成绩

-
7.查询数学成绩是 58 或者 59 或者 98 或者 99 的同学及数学成绩

-
8.%匹配任意多个(包括0个)字符
%匹配的字符没有限制

- 9._匹配严格的一个任意字符

-
- NULL的查询 : IS [NOT] NULL

- NULL的查询 : IS [NOT] NULL
📖8. 分页查询
- 使用 limit 关键字,来进行限制返回的结果条数,使用 offset 来确定从第几条开始进行返回
select 列名 from 表名 limit N offset M;
select 列名 from 表名 limit M,N;
之前我们学习select * from 表名;的时候,有提过,不加限制记录条数的查询是不安全的
分页查询在项目中运用非常多,只要查询的是一个记录的集合(多条记录)都在使用分页查询

通过分页查询可以有效的控制一次查询出来的结果集中的记录的条数,有效的减少数据库服务器的压力,同时对于用户页比较友好
-
从第M条开始查询,返回N条记录
-
1.从 0 开始,筛选 n 条结果

-
2.从S开始,筛选N条结果


-
3.从S开始,筛选N条结果,比第二种方法更明确,建议使用



S=(当前页号-1)*每页显示的记录数
第三页 S=(3-1)*2=4
- 第三页查询

🎓四. 修改(Update)
- 此处的修改,针对数据库服务进行的,修改时持续有效的
update 表名 set 列名 = 值… where 子句;
针对哪个表 哪些行 哪些列 修改成什么值
-
1.将孙悟空的数学成绩变更为80分

-
2.在插入一条同名的孙悟空同学

3.update exam set math = 100;
update 操作的时候,如果不加where 条件,修改的是整张表的所有记录,这个操作非常危险,谨慎操作! -
4.将曹孟德的数学变更为60,语文 变更为70
update 表名 set 列名 = 值, 列名 = 值 where 条件;

- 5.将总成绩倒数三位的同学,数学成绩减30分
如果是加上30分会超出我们原定的范围
我们创建表时用到的decimal(3,1)表示三个数字的长度,保留一位小数,如88.3 77.9
set 中可以包含表达式
update 表名 set 列名 = 列名 + 30 where 条件 order by 列名 排序规则 limit N;

- 6.把所有语文成绩低于50的同学的语文成绩更新为原来的2倍

🎓五. 删除(Delete)
delete from 表名 [where…] [order by…] [limit…]

- 1.删除孙悟空同学的考试成绩

- 2.删除英语成绩倒数前三的同学的所有成绩

- 3.delete 的时候,如果不加where条件会出现什么问题–全删
如果删除时不加条件限制,那么整张表的数据都会被删除掉(清空)
这个操作是非常危险的
虽然可以恢复,每一条执行的SQL都会被记录到日志中,把日志中记录的操作,在执行一遍基本上就可以完成恢复
在生产环境中一般不使用delete操作
一般会在表中加一个deleteState字段,用来表示这条记录是否删除,0表示正常(没有删除) 1表示已删除,用update操作去更新deleteState字段,就可以实现删除功能,这条被删除的数据并没有实质上删除而是始终存在于数据库中
总结

相关文章:
【MySQL】第二弹——MySQL表的增删改查(CRUD)初阶
文章目录 🎓一. CRUD🎓二. 新增(Create)🎓三. 查询(Rertieve)📖1. 全列查询📖2. 指定列查询📖3. 查询带有表达式📖4. 起别名查询(as )📖 5. 去重查询(distinct)📖6. 排序…...
内存、磁盘、CPU区别,Hadoop/Spark与哪个联系密切
1. 内存、磁盘、CPU的区别和作用 1.1 内存(Memory) 作用: 内存是计算机的短期存储器,用于存储正在运行的程序和数据。它的访问速度非常快,比磁盘快几个数量级。在分布式计算中,内存用于缓存中间结果、存储…...
hz2新建Keyword页面
新建一个single-keywords.php即可,需要筛选项再建taxonomy-knowledge-category.php 参考:https://www.tkwlkj.com/customize-wordpress-category-pages.html WordPress中使用了ACF创建了自定义产品分类products,现在想实现自定义产品分类下的…...
离散制造企业WMS+MES+QMS+条码管理系统高保真原型全解析
在离散型制造企业的生产过程中,库存管理混乱、生产进度不透明、质检流程繁琐等问题常常成为制约企业发展的瓶颈。为了帮助企业实现全流程数字化管控,我们精心打造了一款基于离散型制造企业(涵盖单件生产、批量生产、混合生产模式)…...
【并发编程基石】CAS无锁算法详解:原理、实现与应用场景
一、什么是CAS? CAS(Compare-And-Swap) 是现代并发编程的核心算法之一,它通过处理器指令级的原子操作实现线程安全,无需传统锁机制。其核心逻辑可以用一个公式表示: CAS(V, E, N) {if (V E) { // 比较当…...
(自用)Java学习-5.8(总结,springboot)
一、MySQL 数据库 表关系 一对一、一对多、多对多关系设计外键约束与级联操作 DML 操作 INSERT INTO table VALUES(...) DELETE FROM table WHERE... UPDATE table SET colval WHERE...DQL 查询 基础查询:SELECT * FROM table WHERE...聚合函数:COUNT()…...
GOOSE 协议中MAC配置
在 GOOSE(Generic Object Oriented Substation Event)协议中,主站(Publisher)发送的 MAC 地址不需要与从站(Listener)的 MAC 地址一致,其通信机制与 MAC 地址的匹配逻辑取决于 GOOSE…...
机器学习之决策树与决策森林:机器学习中的强大工具
机器学习之决策树与决策森林:机器学习中的强大工具 摘要:本文深入探讨决策树和决策森林在机器学习中的应用优势及其适用场景。决策树凭借其易于配置、原生处理多种数据类型、鲁棒性及可解释性等特点,在小数据集和表格数据处理方面表现卓越。…...
【Redis】谈谈Redis的设计
Redis(Remote Dictionary Service)是一个高性能的内存键值数据库,其设计核心是速度、简单性和灵活性。以下从架构、数据结构、持久化、网络模型等方面解析 Redis 的设计实现原理: 1. 核心设计思想 内存优先:数据主要存…...
【C++】流(Stream)详解:标准流、文件流和字符串流
【C】流(Stream)详解:标准流、文件流和字符串流 在C编程中,流(Stream)是一个非常重要的概念,它为我们提供了统一的数据输入输出接口。本文将详细介绍C中的三种主要流类型:标准流、文件流和字符串流。 一、标准流(Standard Strea…...
基于 Spring Boot 瑞吉外卖系统开发(十三)
基于 Spring Boot 瑞吉外卖系统开发(十三) 查询套餐 在查询套餐信息时包含套餐的分类名,分类名称在category表中,因此这里需要进行两表关联查询。 自定义SQL如下: select s.* ,c.name as category_name from setmeal…...
POSE识别 神经网络
Pose 识别模型介绍 Pose 识别是计算机视觉领域的一个重要研究方向,其目标是从图像或视频中检测出人体的关键点位置,从而估计出人体的姿态。这项技术在许多领域都有广泛的应用,如动作捕捉、人机交互、体育分析、安防监控等。 Pose 识别模型的…...
CSS3 基础知识、原理及与CSS的区别
CSS3 基础知识、原理及与CSS的区别 CSS3 基础知识 CSS3 是 Cascading Style Sheets 的第3个版本,是CSS技术的升级版本,于1999年开始制订,2001年5月23日W3C完成了CSS3的工作草案。 CSS3 主要模块 选择器:更强大的元素选择方式盒…...
电能质量扰动信号信号通过hilbert变换得到瞬时频率
利用Hilbert变换从电能质量扰动信号中提取瞬时频率、瞬时幅值、Hilbert谱和边际谱的详细步骤及MATLAB代码实现。该流程适用于电压暂降、暂升、谐波、闪变等扰动分析。 1. Hilbert变换与特征提取流程 1.1 基本步骤 信号预处理:滤波去噪(如小波去噪&…...
Linux工作台文件操作命令全流程解析(高级篇之awk精讲)
全文目录 1 工具介绍2 核心优势3 命令格式3.1 命令格式说明3.2 组成部分详解3.2.1 选项3.2.2 模式3.2.3 动作3.2.4 输入文件 4 使用说明4.1 常用示例4.2 awk 编程解析4.2.1 基础说明4.2.2 编程进阶 4.3 温馨提示 5 内置变量6 参考文献 写在前面 前面一篇《Linux工作台文件操作命…...
力扣119题:杨辉三角II(滚动数组)
小学生一枚,自学信奥中,没参加培训机构,所以命名不规范、代码不优美是在所难免的,欢迎指正。 标签: 杨辉三角、滚动数组 语言: C 题目: 给定一个非负索引 rowIndex,返回「杨辉三角…...
c++:算法(Algorithms)
目录 常用 STL 算法 1️⃣ std::sort(排序) 2️⃣ std::find(查找等于某值的元素) 3️⃣ std::count(统计出现次数) 4️⃣ std::next(获取迭代器的下一个位置) 5️⃣ .erase(…...
大疆无人机(全系列,包括mini)拉流至电脑,实现直播
参考视频 【保姆级教程】大疆无人机rtmp推流直播教程_哔哩哔哩_bilibili VLC使用教程: VLC工具使用指南-CSDN博客 目录 实现效果: 电脑端 编辑 编辑 无人机端 VLC拉流 分析 实现效果: (实验机型:大疆mini4kRC-N2遥控器、大…...
uniapp-商城-54-后台 新增商品(页面布局)
后台页面中还存在商品信息的添加和修改等。接下来我们逐步进行分析和展开。包含页面布局和数据库逻辑等等。 1、整体效果 样式效果如下,依然采用了表单形式来完成和商家信息差不多,但在商品属性上多做了一些弹窗等界面,样式和功能点表多。 …...
深入浅出MySQL 8.0:新特性与最佳实践
MySQL作为开源关系型数据库的佼佼者,近年来持续更新迭代,尤其是在8.0版本中引入了一系列令人兴奋的新特性。本文将介绍一些MySQL 8.0的关键新功能,并提供最佳实践,旨在帮助开发人员和DBA更好地利用这一强大的数据库管理系统。 一…...
JIT+Opcache如何配置才能达到性能最优
首先打开php.ini文件,进行配置 1、OPcache配置 ; 启用OPcache opcache.enable1; CLI环境下启用OPcache(按需配置) opcache.enable_cli0; 预加载脚本(PHP 7.4,加速常用类) ; opcache.preload/path/to/prel…...
(2)python开发经验
文章目录 1 pyside6加载ui文件2 使用pyinstaller打包 更多精彩内容👉内容导航 👈👉Qt开发 👈👉python开发 👈 1 pyside6加载ui文件 方法1: 直接加载ui文件 from PySide6.QtWidgets import QAp…...
WebpackVite总结篇与进阶
模块化 Webpack Webpack 入口entry 分离app和第三方库入口 这是什么? 这是告诉 webpack 我们想要配置 2 个单独的入口点(例如上面的示例)。 为什么? 这样你就可以在 vendor.js 中存入未做修改的必要 library 或文件࿰…...
【python】基础知识点100问
以下是Python基础语法知识的30条要点整理,涵盖数据类型、函数、控制结构等核心内容,结合最新资料归纳总结: 基础30问 一、函数特性 函数多返回值 支持用逗号分隔返回多个值,自动打包为元组,接收时可解包到多个变量 def func(): return 1, "a" x, y = func()匿…...
uniapp 百家云直播插件打包失败
打包错误日志 Android自有证书 打包失败 错误日志: https://app.liuyingyong.cn/build/errorLog/cf41a610-effe-11ef-88db-05262d4c3e5d原因:需要导入插件依赖 依赖地址:https://ext.dcloud.net.cn/plugin?id16289 百家云直播插件地址 直播插…...
SpringBoot--springboot简述及快速入门
spring Boot是spring提供的一个子项目,用于快速构建spring应用程序 传统方式: 在众多子项目中,spring framework项目为核心子项目,提供了核心的功能,其他的子项目都需要依赖于spring framework,在我们实际…...
vscode_python远程调试_pathMappings配置说明
1.使用说明 vscode python 远程调试pathMappings 配置 launch.json "pathMappings": [{"localRoot": "本地代码目录","remoteRoot": "远程代码目录" # 注意不是运行目录, 是远程代码的目录}],2.测试验证 测试目的: 远程代…...
遨游5G-A防爆手机:赋能工业通信更快、更安全
在工业数字化转型与5G-A商用进程加速的双重驱动下,中国防爆手机市场正迎来历史性发展机遇。作为“危、急、特”场景通信解决方案服务商,遨游通讯深刻洞察到:当5G-A网络以超高速率、海量连接和毫秒级时延重塑行业生态时,防爆手机这…...
Profibus DP主站与Modbus RTU/TCP网关与海仕达变频器轻松实现数据交互
Profibus DP主站与Modbus RTU/TCP网关与海仕达变频器轻松实现数据交互 Profibus DP主站转Modbus RTU/TCP(XD-MDPBm20)网关在Profibus总线侧实现主站功能,在Modbus串口侧实现从站功能。可将ProfibusDP协议的设备(如:海…...
C++八股——智能指针
文章目录 1. 背景2. 原理与使用2.1 auto_ptr2.2 unique_ptr2.3 shared_ptr2.4 weak_ptr2.5 定制删除器 1. 背景 智能指针不是指针,是一个管理指针的类,用来存储指向动态分配对象的指针,负责自动释放动态分配的对象,防止堆内存泄漏…...
