当前位置: 首页 > article >正文

【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._匹配严格的一个任意字符
    在这里插入图片描述
    1. 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)

文章目录 &#x1f393;一. CRUD&#x1f393;二. 新增(Create)&#x1f393;三. 查询(Rertieve)&#x1f4d6;1. 全列查询&#x1f4d6;2. 指定列查询&#x1f4d6;3. 查询带有表达式&#x1f4d6;4. 起别名查询(as )&#x1f4d6; 5. 去重查询(distinct)&#x1f4d6;6. 排序…...

Springboot中如何自定义配置类

在 Spring Boot 中&#xff0c;自定义配置类是通过 Configuration 注解定义的类&#xff0c;用于替代传统的 XML 配置&#xff0c;管理 Bean 的创建和应用程序的设置。 1. 创建自定义配置类 (1) 基本配置类 使用 Configuration 注解标记类&#xff0c;并在其中定义 Bean 方法…...

基于zernike 拟合生成包裹训练数据-可自定义拟合的项数

可以看到拟合误差其实还是有很多的,但是这个主要是包裹噪声产生的,用到了github 上的zernike 库,直接pip install 一下安装就可以了 import numpy as np import matplotlib.pyplot as plt from matplotlib import cm from mpl_toolkits.mplot3d import Axes3D import matpl…...

大模型赋能:2D 写实数字人开启实时交互新时代

在数字化浪潮席卷全球的当下&#xff0c;人工智能技术不断突破创新&#xff0c;其中大模型驱动的 2D 写实数字人正成为实时交互领域的一颗新星&#xff0c;引领着行业变革&#xff0c;为人们带来前所未有的交互体验。 一、2D 写实数字人概述 2D 写实数字人是通过计算机图形学…...

5G-A来了!5G信号多个A带来哪些改变?

5G-A来了&#xff01;5G信号多个A带来哪些改变&#xff1f; 随着科技不断进步&#xff0c;通信网络的迭代升级也在加速。自4G、5G的推出以来&#xff0c;我们见证了通信技术的飞跃式发展。最近&#xff0c;越来越多的用户发现自己手机屏幕右上角的5G标识已经变成了“5G-A”。那…...

Chroma:一个开源的8.9B文生图模型

Chroma 模型讲解 一、模型概述 Chroma 是一个基于 FLUX.1-schnell 的 8.9B 参数模型。它采用了 Apache 2.0 许可证&#xff0c;完全开源&#xff0c;允许任何人使用、修改和在其基础上进行开发&#xff0c;不存在企业限制。该模型目前正在训练中&#xff0c;训练数据集从 20M…...

Ingrees 控制器与 Ingress 资源的区别

在 Kubernetes 中&#xff0c;单纯的 Ingress 资源定义文件&#xff08;YAML&#xff09;本身不会直接创建 Pod。Ingress 的作用是定义路由规则&#xff08;如将外部流量路由到集群内的服务&#xff09;&#xff0c;而实际处理流量的 Pod 是由 Ingress 控制器&#xff08;如 Ng…...

android 折叠屏开发适配全解析:多窗口、铰链处理与响应式布局

安卓适配折叠屏指南 折叠屏设备为安卓开发带来了新的机遇和挑战。以下是适配折叠屏的关键要点&#xff1a; 1. 屏幕连续性检测 // 检查设备是否支持折叠屏特性 private fun isFoldableDevice(context: Context): Boolean {return context.packageManager.hasSystemFeature(&…...

[强化学习的数学原理—赵世钰老师]学习笔记01-基本概念

[强化学习的数学原理—赵世钰老师]学习笔记01-基本概念 1.1 网格世界的例子1.2 状态和动作1.3 状态转移1.4 策略1.5 奖励1.6 轨迹、回报、回合1.6.1 轨迹和回报1.6.2 回合 1.7 马尔可夫决策过程 本人为强化学习小白&#xff0c;为了在后续科研的过程中能够较好的结合强化学习来…...

1、Kafka与消息队列核心原理详解

消息队列&#xff08;Message Queue, MQ&#xff09;作为现代分布式系统的基础组件&#xff0c;极大提升了系统的解耦、异步处理和削峰能力。本文以Kafka为例&#xff0c;系统梳理消息队列的核心原理、架构细节及实际应用。 Kafka 基础架构及术语关系图 术语简要说明 Produce…...

免费公共DNS服务器推荐

当自动获取的DNS或本地运营商的DNS出现问题&#xff0c;可能导致软件无法连接服务器。此时&#xff0c;手动修改电脑的DNS设置或许能解决问题。许多用户觉得电脑上网速度慢、游戏卡顿&#xff0c;归咎于DNS问题。确实&#xff0c;我们可以自行设置一个DNS来改善网络体验。不少用…...

POST请求 、响应、requests库高级用法

常见请求方式POST请求 代码如下 import requestsdata {name:germey,age:25} r requests.post("https://www.httpbin.org/post",datadata) print(r.text) 如果请求方式为POST方式&#xff0c;运行结果如下&#xff1a; {"args": {}, "data"…...

React 第三十八节 Router 中useRoutes 的使用详解及注意事项

前言 useRoutes 是 React Router v6 引入的一个钩子函数&#xff0c;允许通过 JavaScript 对象&#xff08;而非传统的 JSX 语法&#xff09;定义路由配置。这种方式更适合复杂路由结构&#xff0c;且代码更简洁易维护。 一、基础使用 1.1、useRoutes路由配置对象 useRoute…...

ApplicationEventPublisher 深度解析:Spring 事件驱动模型的核心

ApplicationEventPublisher 是 Spring 框架中 事件驱动编程模型 的核心接口&#xff0c;用于实现 观察者模式&#xff08;Observer Pattern&#xff09;。它允许 Bean 之间通过 发布-订阅机制 进行松耦合通信&#xff0c;适用于解耦业务逻辑、实现异步处理等场景。 1. Applicat…...

【统计以空格隔开的字符串数量】2021-11-26

缘由一提标准的大一oj提木-编程语言-CSDN问答 void 统计以空格隔开的字符串数量() {//缘由https://ask.csdn.net/questions/7580109?spm1005.2025.3001.5141int n 0, x 0, g 0, k 1;string s "";cin >> n;getchar();while (n--){getline(cin, s);while …...

OSCP备战-kioptrixvm3详细解法

探测IP arp-scan -l 得出目标IP&#xff1a;192.168.155.165 也可以使用 netdiscover -i eth0 -r 192.168.155.0/24 也可以使用 nmap -sN 192.168.155.0/24 --min-rate 1000 修改hosts文件 找到IP后&#xff0c;通过之前读取README.txt了解到&#xff0c;我们需要编辑host…...

客服系统重构详细计划

# 客服系统重构详细计划 ## 第一阶段&#xff1a;系统分析与准备工作 ### 1. 代码审查和分析 (1-2周) - 全面分析现有代码结构 - 识别代码中的问题和瓶颈 - 理解当前系统的业务逻辑 - 确定可重用的组件 - 制作系统功能清单 ### 2. 技术栈升级准备 (1周) - 升级PHP版本到7…...

《从零构建大模型》PDF下载(中文版、英文版)

内容简介 本书是关于如何从零开始构建大模型的指南&#xff0c;由畅销书作家塞巴斯蒂安• 拉施卡撰写&#xff0c;通过清晰的文字、图表和实例&#xff0c;逐步指导读者创建自己的大模型。在本书中&#xff0c;读者将学习如何规划和编写大模型的各个组成部分、为大模型训练准备…...

视频编解码学习六之视频采集和存储

视频采集的核心原理是用光学元件&#xff08;如摄像头&#xff09;将光信号转换为电信号进行传输和存储。 摄像头的主要功能是将光学图像转换为电信号&#xff08;模拟或数字&#xff09;&#xff0c;核心流程如下&#xff1a; 1. 光学成像 镜头组&#xff1a;聚焦光线到感光…...

大数据应用开发和项目实战-电商双11美妆数据分析

数据初步了解 &#xff08;head出现&#xff0c;意味着只出现前5行&#xff0c;如果只出现后面几行就是tail&#xff09; info shape describe 数据清洗 重复值处理 这个重复值是否去掉要看实际情况&#xff0c;比如说&#xff1a;昨天卖了5瓶七喜&#xff0c;今天卖了5瓶七…...

《算法导论(第4版)》阅读笔记:p18-p31

《算法导论(第4版)》学习第 11 天&#xff0c;p18-p31 总结&#xff0c;总计 4 页。 一、技术总结 1. Fourier transform(傅里叶变换) In mathematics, the Fourier transform (FT) is an integral transform that takes a function as input then outputs another function…...

[Java][Leetcode simple]26. 删除有序数组中的重复项

思路 第一个元素不动从第二个元素开始&#xff1a;只要跟上一个元素不一样就放入数组中 public int removeDuplicates(int[] nums) {int cnt1;for(int i 1; i < nums.length; i) {if(nums[i] ! nums[i-1]) {nums[cnt] nums[i];}}return cnt;}...

招行数字金融挑战赛数据分析赛带赛题二

赛题描述&#xff1a;根据提供的脱敏资讯新闻数据&#xff0c;选手需要对提供的训练集进行特征工程&#xff0c;构建资讯分类模型&#xff0c;对与测试集进行准确的新闻分类。 最终得分&#xff1a;0.8120。十二点关榜没看到排名&#xff0c;估算100&#xff1f; 训练集很小&am…...

卡尔曼滤波算法(C语言)

此处感谢华南虎和互联网的众多大佬的无偿分享。 入门常识 先简单了解以下概念&#xff1a;叠加性&#xff0c;齐次性。 用大白话讲&#xff0c;叠加性&#xff1a;多个输入对输出有影响。齐次性&#xff1a;输入放大多少倍&#xff0c;输出也跟着放大多少倍 卡尔曼滤波符合这…...

ENSP-OSPF综合实验

AR4中通过ospf获取的其他区域路由信息&#xff0c;并且通过路由汇总后简化路由信息 实现全网通&#xff0c;以及单向重发布&#xff0c;以及通过缺省双向访问&#xff0c; 通过stub简化过滤四类五类lsa&#xff0c;简化ospf路由信息 通过nssa简化ospf信息 区域汇总简化R4路由信…...

电池单元和电极性能

电芯设计中的挑战 对于电池制造商来说&#xff0c;提高电池能量和功率密度至关重要。在高功率密度和长循环寿命之间取得平衡是电池设计中的关键挑战&#xff0c;通常需要仔细优化材料、电极结构和热管理系统。另一个关键挑战是通过优化重量体积比来降低电池单元的总体成本。 工…...

软件设计师-错题笔记-软件工程基础知识

1. 解析&#xff1a; A&#xff1a;体系结构设计是概要设计的重要内容&#xff0c;它关注系统整体的架构&#xff0c;包括系统由哪些子系统组成、子系统之间的关系等 B&#xff1a;数据库设计在概要设计阶段会涉及数据库的逻辑结构设计等内容&#xff0c;如确定数据库的表结…...

Redis协议与异步方式(二)

目录 1.redis pipeline 2.redis 事务 2.1 MULTI 2.2 EXEC 2.3 DISCARD 2.4 WATCH 3.lua 脚本 调用方式 4.ACID 特性分析 5.发布订阅 原理 命令 6.异步连接 思想 代码 1.redis pipeline 通过一次发送多次请求命令&#xff0c;为了减少网络传输时间。 注意&#xff1a;p…...

使用 Java 反射打印和操作类信息

Java 反射是 Java 语言的强大特性,允许开发者在运行时动态检查和操作类、字段、方法和构造函数等信息。通过 java.lang.Class 和 java.lang.reflect 包,反射 API 提供了类似 JDK 工具 javap 的功能,用于打印类的详细信息,或实现动态方法调用和字段访问。反射广泛应用于框架…...

销售管理系统使用全攻略:从基础配置到数据分析

如果你是一名刚接手公司销售管理系统的销售经理&#xff0c;你会深刻体会到一个好工具的重要性。如果老板突然要查看季度销售数据时&#xff0c;就不用手忙脚乱地翻找各种Excel表格。 今天就来分享我的经验&#xff0c;希望能帮助到同样需要快速上手的朋友。 系统基础配置指南 …...