MySQL数据的增删改查(一)
目录
新增(create)
插入单条记录
插入多条记录
查询(retrieve)
查询所有列
查询特定列
查询字段为表达式
别名
去重
排序
按单列排序
按多列排序
使用表达式或别名排序
排序NULL值
条件查询
比较运算符
逻辑运算符
基本查询
AND和OR
范围查询
BETWEEN AND
IN
模糊查询
NULL 的查询
分页查询
修改(update)
删除(delete)?
在本篇文章中,我们来学习 C(create 增加)R(retrieve 查询)U(update 更新)D(delete 删除),即 数据的增删改查
新增(create)
要想插入数据,我们首先得有数据表,因此,我们先创建一张学生表:
USE test;
DROP TABLE IF EXISTS student; – 若学生表已经存在,则删除
CREATE TABLE student(
id INT,
name VARCHAR(20),
age INT,
class VARCHAR(10)
);
学生表已经创建好了
接下来,我们就可以往表中插入数据了
插入单条记录
语法:
INSERT INTO table_name (column1, column2, column3, …) VALUES (value1, value2, value3, …);
全列插入(所有数据都插入)时,可以省略 (column1, column2, column3, …)
insert into student values(1, “张三”,18, “1班”);
插入成功
其中,
Query OK:表示执行成功
1 row affected:表示操作影响了一行记录
(0.01 sec):表示执行时间
ERROR:表示操作失败,出现了错误
Column count doesn’t match value count at row 1:描述了错误原因,列数量与第一行中的值数量不匹配
而若只插入指定列,就需要使用 (column1, column2, column3, …),column 的数量必须和 value 的数量一致
insert into student (id, name, age) values (2, “李四”, 19);
插入多条记录
语法:
INSERT INTO table_name (column1, column2, column3, …) VALUES
(value1_1, value2_1, value3_1, …),
(value1_2, value2_2, value3_2, …),
…;
插入两条数据:
insert into student values
(3, “王五”, 18, “2班”),
(4, “赵六”, 19, “1班”);
指定列插入两条数据:
insert into student (id, name, age)values
(5, “一一”, 18),
(6, “二二”, 19);
注意:
(1)插入的数据类型要与表中列的数据类型匹配
(2)插入数据时,列的顺序必须和 VALUES 中的顺序一致
(3)若表的列中有 NOT NULL 约束,必须提供这些列的值(除非有默认值)
查询(retrieve)
查询所有列
语法:
select * from table_name;
我们查询刚才插入的所有数据:
由于 student 表中的数据不多,因此很快就将所有的数据都查询出来了,但是,当表中的数据很多时,此时查询所有数据就需要花费很多时间
由于 mysql 是 客户端服务器 结构的:
当查询的数据量很大时,select * from table_name 操作就会产生大量的硬盘 IO 和网络 IO,就可能把硬盘和网卡的带宽吃满,服务器就无法正常响应了,而若此时其他的客户端向服务器发送请求,服务器就无法响应数据,其他客户端就会认为服务器挂了
因此,通常情况下,并不建议使用 * 进行全列查询(查询的列越多,意味着需要传输的数据量越大)
查询特定列
语法:
SELECT column1 column2, … FROM table_name;
注:指定列的顺序不需要安装定义表的顺序来
示例:
我们查询 id 和 年龄:
select id, age from student;
查询字段为表达式
语法:
select expr, … from table_name;
示例:
表达式中不包含字段:
select id, name, 20from student;
表达式中包含一个字段:
select id, name, age + 20 from student;
在查询出结果后,会将每一行带入表达式进行运算
当前的表达式查询,并没有修改服务器上硬盘存储的数据本体,只是在查询结果的基础上进行运算,得到的是一个 临时表,当这个查询操作结束时,这里的数据(age + 20)也就没有了,数据库服务器硬盘内容不会有任何改变
为了方便进行后续演示,我们再创建一个 考试成绩表:
drop table if exists exam_result;
create table exam_result(
id int,
name varchar(10),
chinese decimal(4,1),
math decimal(4,1),
english decimal(4,1)
);– 插入数据
insert into exam_result values
(1, “一一”, 80.1, 70.9, 90.0),
(2, “二二”, 60.9, 76.9, 90.5),
(3, “三三”, 70.3, 96.3, 83.4),
(4, “四四”, 83.7, 84.6, 75.3);
表达式中包含多个字段:
select id, name, chinese + math + english from exam_result;
别名
上述 chinese + math + english 计算的是成绩总和,我们一般会选择使用 总分 进行表示,因此,我们就可以以 总分 作为计算结果的临时别名
别名(alias):用于为表或字段指定临时名称,以简化查询和提高可读性,别名在查询的执行结果过程中不会改变数据库中的实际表名或列名
语法:
SELECT column [AS] alias_name FROM table_name;
例如:
select id, chinese + math + english as ‘总分’ from exam_result;
as 可以省略,即:
select id, chinese + math + english’总分’ from exam_result;
去重
当某列中有重复记录时,我们就可以使用 DISTINCT对其进行去重
例如:
select age from student;
去重:
select distinct age from student;
排序
在 MySQL 中,可以使用 ORDER BY 来对查询结果进行排序,当没有使用 order by 子句时进行查询,返回的结果是未定义(无序)的
按单列排序
语法:
SELECT column1, column2 FROM table_name ORDER BY column_name [ASC|DESC];
其中,ASC 表示升序,排序时默认是升序,因此可以省略;DESC 表示降序
例如:
对数学成绩进行降序排列:
select id, name, math from exam_result order by math desc;
对语文成绩进行升序排列:
select id, name, chinese from exam_result order by chinese;
按多列排序
语法:
SELECT column1, column2 FROM table_name ORDER BY column1 [ASC|DESC], column2 [ASC|DESC];
按照多个列进行排序时,先按照第一个列排序,若第一个列出现值相同的情况,则按照第二个列排序,以此类推
例如:
按照学生的年龄进行降序排列,若年龄相同,则按照 id 进行升序排列:
select id, name, age from student order by age desc, id;
使用表达式或别名排序
例如:
查询学生考试总分,按照升序进行排列:
select id, name, chinese + math + english as totalfrom exam_result order by total;
排序NULL值
null 数据参与排序时,视为比任何值都小,升序时出现在最上面,降序时出现在最下面
条件查询
当我们只需要查询特定的数据时,就可以使用 WHERE 进行条件查询,过滤数据,只返回满足特定条件的数据
在学习条件查询的语法之前,我们先来学习一些运算符
比较运算符
运算符
说明
>, >=, <, <=
大于,大于等于,小于,小于等于
=
等于,NULL不安全,出现 NULL = NULL 时结果为 NULL
<=>
等于,NULL安全,出现 NULL <=> NULL 时结果为 true
!=, <>
不等于
BETWEND a AND b
范围匹配,[a, b],若 a <= value <= b,返回 true
IN (option, …)
若是 option 中的任意一个,返回 true
IS NULL
是 NULL
IS NOT NULL
不是 NULL
LIKE
模糊匹配,% 表示任意多个字符,_ 表示任意一个字符
逻辑运算符
运算符
说明
AND
多个条件必须都为 true,结果才为 true
OR
任意一个条件为 true,结果都为 true
NOT
条件为 true 时,结果为 false
注意:
(1)WHERE 条件中可以使用表达式,但是不能使用别名
(2)AND 的优先级高于 OR,在同时使用且需要先执行 or 时,需要使用 () 小括号包裹优先执行的部分
接下来,我们来学习如何进行条件查询
查询语法:
SELECT column1, column2 FROM table_name WHERE condition;
基本查询
例如:
查询年龄为 18 的学生:
select id, name, age from student where age = 18;
查询总分大于240的学生:
select name, chinese + math + english as ‘总分’ from exam_result wherechinese + math + english> 240;
查询英语成绩大于语文成绩的学生:
select name, chinese, english from exam_result where english > chinese;
AND和OR
查询 数学成绩高于80分 并且 语文成绩也高于80分 的同学:
select name, math, chinese from exam_result where math > 80 and chinese > 80;
查询 数学成绩高于80分 或语文成绩也高于80分 的同学:
select name, math, chinese from exam_result where math > 80 or chinese > 80;
观察 AND 和 OR 的优先级:
select name, chinese, math, english from exam_result where chinese > 80 or math > 80 and english > 80;
上述查询相当于:
mysql> select name, chinese, math, english from exam_result where chinese > 80 or (math > 80 and english > 80);
若要先使用 OR,则需要加上 ()
select name, chinese, math, english from exam_result where (chinese > 80 or math> 80) and english > 80;
范围查询
BETWEEN AND
查询 数学成绩在 80- 90 的同学:
select name, math from exam_result where math between 80 and 90;
IN
查询 id 为 1、3、4、9 的学生:
select id, name from exam_result where id in (1, 3, 4, 9);
模糊查询
使用 LIKE 进行模糊查询
我们往 student 表中插入数据
insert into student (id, name, age) values (7, “张一一”, 20), (8, “张二二”, 17);
使用 _ 匹配任意一个字符
select name from student where name like ‘张_’;
使用 % 匹配任意多个(包括 0 个)字符
select name from student where name like ‘张%’;
NULL 的查询
通过 IS [NOT] NULL 查询 NULL 值 或 过滤 NULL 值
查询班级已知的同学:
select name, class from student where class is not null;
查询班级未知的同学
select name, class from student where class is null;
分页查询
语法:
SELECT … FROM table_name [WHERE…] [ORDER BY … ] LIMIT count;
SELECT … FROM table_name [WHERE…] [ORDER BY … ] LIMIT offset, count;
SELECT … FROM table_name [WHERE…] [ORDER BY … ] LIMIT countOFFSET offset;
offset:开始的行号(行号从 0 开始)
count:返回的行数
当不指定 offset 时,默认从 0(也就是第一条记录)开始,若指定 offset ,则从offset 开始,显示 n 条数据
例如:
按照 id 进行分页,获取第一页3条数据:
select id, name from student limit 3;
按照 id 进行分页,获取第二页3条数据:
select id, name from student limit 3, 3;
按照 id 进行分页,获取第三页3条数据:
select id, name from student limit 3 offset6;
修改(update)
语法:
UPDATE table_name SET column1 = value1 [, column2 = value2] [WHERE condition] [ORDER BY condition] [LIMIT];
例如:
将 id 为 3 的学生的数学成绩修改为 87:
update exam_result set math = 87 where id = 3;
将所有学生的语文成绩加上 5 分:
update exam_result set chinese = chinese + 5;
将总成绩倒数的同学英语成绩加上 10 分:
update exam_result set english = english + 10 order by chinese + math + english limit 1;
删除(delete)
语法:
DELETE FROM table_name [ WHERE …] [ ORDER BY … ] [ LIMIT … ];
例如:
删除 id 为 3 的学生数据:
delete from exam_result where id = 3;
删除总分最高的两名学生数据:
delete from exam_result order by chinese + math + english desc limit 2;
删除表中所有数据:
delete from exam_result;
相关文章:

MySQL数据的增删改查(一)
目录 新增(create) 插入单条记录 插入多条记录 查询(retrieve) 查询所有列 查询特定列 查询字段为表达式 别名 去重 排序 按单列排序 按多列排序 使用表达式或别名排序 排序NULL值 条件查询 比较运算符 逻辑运算…...

国产文本编辑器EverEdit - 如何给小众语言开发大纲分析脚本
1 开发参考:小众语言如何开发大纲分析脚本 1.1 应用场景 在使用IDE进行代码开发时,代码中的变量、结构体、函数等,在大纲视图中都会显示出来,用户可以快速的了解当前文档的结构,以及快速跳转到函数、变量的声明位置。…...
【数据结构】线性数据结构——数组
1. 定义 数组是一种线性数据结构,由一组相同类型的元素组成,这些元素使用连续的内存空间存储。数组通过索引(下标)访问,每个元素的索引是固定的,从零开始递增。 2. 特点 顺序存储: 元素在内存…...

QT---------GUI程序设计基础
代码UI化设计(QT) 实例功能概述 假设我们要创建一个简单的计算器应用程序。该应用程序具有以下功能: 包含数字按钮(0-9)、操作符按钮(、-、*、/)、等于按钮()和清除按…...

2、Bert论文笔记
Bert论文 1、解决的问题2、预训练微调2.1预训练微调概念2.2深度双向2.3基于特征和微调(预训练下游策略) 3、模型架构4、输入/输出1.输入:2.输出:3.Learned Embeddings(学习嵌入)1. **Token Embedding**2. **Position Embedding**3…...

Linux之ARM(MX6U)裸机篇----7.蜂鸣器实验
一,蜂鸣器模块 封装步骤: ①初始化SNVS_TAMPER这IO复用为GPIO ②设置SNVS_TAMPPER这个IO的电气属性 ③初始化GPIO ④控制GPIO输出高低电平 bsp_beep.c: #include "bsp_beep.h" #include "cc.h"/* BEEP初始化 */ void beep_init…...

Zabbix 监控平台 添加监控目标主机
Zabbix监控平台是一个企业级开源解决方案,用于分布式系统监视和网络监视。它由Zabbix Server和可选组件Zabbix Agent组成,通过C/S模式(客户端-服务器模型)采集数据,并通过B/S模式(浏览器-服务器模型&#x…...

SpringCloud整合skywalking实现链路追踪和日志采集
1.部署skywalking https://blog.csdn.net/qq_40942490/article/details/144701194 2.添加依赖 <!-- 日志采集 --><dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-logback-1.x</artifactId><version&g…...
html文件通过script标签引入外部js文件,但没正确加载的原因
移动端H5应用,html文件通过script标签引入外部js文件,但没正确加载,在移动设备上难以排查。通过PC浏览器打开,发现js被阻止了:blocked:mixed-content。 原因在于: “blocked:mixed - content” 是浏览器的…...

OpenHarmony开发板环境搭建
程序员Feri一名12年的程序员,做过开发带过团队创过业,擅长Java相关开发、鸿蒙开发、人工智能等,专注于程序员搞钱那点儿事,希望在搞钱的路上有你相伴!君志所向,一往无前! 0.OpenHarmony 0.1 OpenHarmony OpenHarmony是一款面向全场景、全连接、全智能的…...

【Rust自学】7.6. 将模块拆分为不同文件
喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 7.6.1. 将模块的内容移动到其他文件 如果在模块定义时模块名后边跟的是;而不是代码块&#…...

Python入门:8.Python中的函数
引言 在编写程序时,函数是一种强大的工具。它们可以将代码逻辑模块化,减少重复代码的编写,并提高程序的可读性和可维护性。无论是初学者还是资深开发者,深入理解函数的使用和设计都是编写高质量代码的基础。本文将从基础概念开始…...
MySQL什么情况下会加间隙锁?
目录 一、使用范围条件查询 二、唯一索引的范围查询 三、普通索引的查询 四、间隙锁的锁定规则 五、间隙锁的影响 间隙锁(Gap Lock)是MySQL中的一种锁机制,主要用于防止幻读现象。在MySQL的InnoDB存储引擎中,当事务隔离级别设置为可重复读(Repeatable Read)时,间隙…...

【服务器开发及部署】code-server 显示git graph
在开发一些linux上的内容的时候进程需要在开发机和生产部署上花费大量的时间。 为了解决上述问题,我们今天介绍一款在服务上开发的思路 git + code server + 宝塔 其中需要处理一些问题,此处都有交代 步骤 安装宝塔安装code-server配置插件配置浏览器处理的问题 git版本过低,…...

Linux 终端查看 nvidia 显卡型号
文章目录 写在前面1. 需求描述2. 实现方法方法一:方法二方法三: 参考链接 写在前面 自己的测试环境: Ubuntu20.04 1. 需求描述 Linux 终端查看 nvidia 显卡型号 2. 实现方法 方法一: 执行下列指令: sudo update…...
助你通过AI培训师中级考试的目录索引
嘿,各位看官!在您正式踏入接下来的知识小宇宙之前,咱先唠唠几句… 家人们,我跟你们说,我脑一热报名了那个 AI 培训师考试。本想着开启一场知识的奇幻之旅,结果呢,学视频内容的时候,那…...
百度PaddleSpeech识别大音频文件报错
一、背景 公司前同事留下了一套语音识别项目,内部使用百度PaddleSpeech。在项目验收的时候发现无法识别大音频文件,但是可以识别小音频文件。 这套项目是通过python调用的百度PaddleSpeech,然后提供了restful接口,然后java项目可…...

Lucene 漏洞历险记:修复损坏的索引异常
作者:来自 Elastic Benjamin Trent 有时,一行代码需要几天的时间才能写完。在这里,我们可以看到工程师在多日内调试代码以修复潜在的 Apache Lucene 索引损坏的痛苦。 做好准备 这篇博客与往常不同。它不是对新功能或教程的解释。这是关于花…...

RabbitMQ基础篇之快速入门
文章目录 一、目标需求二、RabbitMQ 控制台操作步骤1.创建队列2.交换机概述3.向交换机发送消息4.结果分析5.消息丢失原因 三、绑定交换机与队列四、测试消息发送五、消息查看六、结论 一、目标需求 新建队列:创建 hello.queue1 和 hello.queue2 两个队列。消息发送…...
如何自定义 Kubernetes KubeSphere 默认 Logo:详细实现方案
要将 Pod 中的路径 /opt/kubesphere/console/dist/assets/logo.svg 替换为外部的某个图片,可以通过以下几种方法处理。推荐使用 挂载 ConfigMap 或 Secret 的方式,因为它是 Kubernetes 原生的、可持续的解决方案。 方法 :使用 ConfigMap 挂载…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...

2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...