[MySQL初阶]MySQL(4)基本查询
标题:[MySQL初阶]MySQL(4)基本查询
@水墨不写bug

文章目录
- 一. 数据表设计
- 二、对数据表的操作
- 1. Create 操作(插入数据)
- 查看最近受影响的行数:
- 2. Retrieve 操作(读取数据)
- (1)基本查询的用法:
- (2)where子句详解
- i. 基本语法
- ii. 常用运算符
- 比较运算符
- 逻辑运算符
- 模糊匹配(LIKE)
- NULL 值比较
- (3)order by子句详解
- i. 基本语法
- ii. 核心用法
- 单列排序
- 多列排序
- (4)limit子句
- i. 基本语法
- ii. 核心用法
- (1) 获取前 N 条记录
- (2) 分页查询
- 3. Update 操作(更新数据)
- 4. Delete 操作(删除数据)
- 三、总结
本文讲解MySQL数据库的表的基本查询操作(CURD操作):CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除)
在这里,我将首先创建一个数据表,然后对这个表一边操作,一边讲解。
一. 数据表设计
首先,我们设计一个用户管理系统,以它内部的 users 表为例,表结构如下:
CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT COMMENT '员工ID',username VARCHAR(50) NOT NULL UNIQUE COMMENT '名字',email VARCHAR(100) NOT NULL UNIQUE COMMENT '邮箱',password_hash CHAR(60) NOT NULL COMMENT '密码',created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建账户时间',last_login DATETIME COMMENT '最后一次登录时间',is_active BOOLEAN DEFAULT 1 COMMENT '用户是否活跃'
);
二、对数据表的操作
1. Create 操作(插入数据)
插入数据语法:
- 单行数据+全列插入:
一次插入一行数据,每次全列插入
insert into users(id,username,email,password_hash,created_at,last_login,is_active) values (1,'zhangsan','123@qq.com','60个字符',NOW(),NOW(),TRUE);

- 多行数据+指定列插入:
-- 插入多行数据,指定 username、email、password_hash、is_active 列
INSERT INTO users (username, email, password_hash, is_active)
VALUES ('lisi', '000@ex.com', '$2a$10$abc...', 1), -- 显式指定 is_active('sunwukong', 'wukong@xe.com', '$2a$10$xyz...', 0);
为了方便起见,这里我们假设插入一个较小的数据表。
- 插入冲突是否更新:
insert into tb_name(name,qq) values('zhangsan','123') on duplicate key update name = 'lisi',qq = '234';
插入数据:
尝试插入一条记录,name 为 ‘zhangsan’,qq 为 ‘123’。
冲突处理:
如果插入的数据与表中已有的 主键或唯一键 冲突(例如 name 或 qq 字段有唯一约束),则执行 UPDATE 操作。
将冲突记录的 name 更新为 'lisi',qq 更新为 '234'。
- 替换
replace into tb_name (name, qq) values ('zhangsan', '123');
插入数据:
尝试插入一条记录,name 为 ‘zhangsan’,qq 为 ‘123’。
冲突处理:
如果插入的数据与表中已有的 主键或唯一键 冲突(例如 name 或 qq 字段有唯一约束),则会 先删除冲突的行,再插入新行。
注意:REPLACE INTO 是 先删除再插入,而不是更新。
查看最近受影响的行数:
select row_count();
可以查看最近受影响的行数。
2. Retrieve 操作(读取数据)
语法:
SELECT column1, column2, ... FROM table_name [WHERE ...];
这是最基本的查询方式,在最基本的语句之间,我们可选择加上一些选项。比较丰富的选项可以如下所示:
select distinct(是否去重) */列名 from tb_name where 查询条件 order by 列名称 asc/desc(排序条件) limit(限定查询出来的数据的条目数);
(1)基本查询的用法:
- 全列查询:
select * from tb_name;
一般不推荐全列查询会输出整张表的所有内容,对一个数据库,数据量动辄上百万,盲目全列查询会占用网络带宽,并且导致刷屏或者机器死机,一般需要用limit指定查询数据条目数。
- 指定列查询:
select 列名称 from tb_name;
指定某一列内容输出。
- 列间关系运算
查询的时候,可以进行列间运算
select name,math+chinese+english as total from tb_name;
显示出来的是3列成绩的综合。其中as 代表重命名,每一列都可以重命名
select name 姓名,math 数学,english 英语,math + chinese + english 总分 from tb_name;
- 结果去重
select distinct math from tb_name;
如果查询结果有重复,比如有多个人得分95,只显示一次95
(2)where子句详解
MySQL 的 WHERE 子句用于在查询中筛选符合特定条件的记录。它是 SELECT、UPDATE、DELETE 等语句的核心组成部分,select帮助你选择了某一张表,而where则是进一步选择表中符合要求的数据;更直观的来说,where字句类似于if条件判断。
i. 基本语法
SELECT 列名 FROM 表名 WHERE 条件;
UPDATE 表名 SET 列=值 WHERE 条件;
DELETE FROM 表名 WHERE 条件;
ii. 常用运算符
比较运算符
=,<=>:等于- 注意:"="NULL不安全(无法参与NULL比较),如果想要与NULL值比较,需要用NULL安全的
<=>例如:NULL <=> NULL 结果为TRUE。SELECT * FROM users WHERE age = 25; SELECT * FROM users WHERE address <=> NULL; <>或!=:不等于SELECT * FROM products WHERE price <>(或者!=) 100;>、<、>=、<=:关系比较SELECT * FROM orders WHERE sum_amount > 1000;BETWEEN ...AND...:在范围内(闭区间)SELECT * FROM employees WHERE salary BETWEEN 300 AND 1000;IN:匹配列表中的任意值SELECT * FROM customers WHERE country IN ('China', 'Canada', 'Mexico');
逻辑运算符
AND:同时满足多个条件SELECT * FROM students WHERE age >= 18 AND grade = 'A';OR:满足任意一个条件SELECT * FROM products WHERE category = 'aaa' OR price < 50;NOT:否定条件SELECT * FROM employees WHERE NOT department = 'HR';- 注意优先级:
AND优先级高于OR,建议用括号明确逻辑:SELECT * FROM table WHERE (condition1 OR condition2) AND condition3;
模糊匹配(LIKE)
%:匹配任意多个字符(包括零个)SELECT * FROM books WHERE title LIKE 'The%'; -- 以 "The" 开头_:匹配单个字符SELECT * FROM users WHERE username LIKE 'user_'; -- 如 "user1", "userA"
一句话总结, % 可以代表一个或者多个字符, _ 只能代表一个字符
NULL 值比较
IS NULL:检查空值SELECT * FROM orders WHERE shipped_date IS NULL;IS NOT NULL:检查非空值SELECT * FROM contacts WHERE phone IS NOT NULL;
(3)order by子句详解
MySQL 的 ORDER BY 子句用于对查询结果进行排序,可以按单列、多列或表达式排序,并支持升序(ASC)或降序(DESC)排列。它是优化数据展示和分析的重要工具。
i. 基本语法
SELECT 列名
FROM 表名
[WHERE 条件]
ORDER BY 排序列1 [ASC|DESC], 排序列2 [ASC|DESC], ...;
- 位置:
ORDER BY必须位于WHERE子句之后,LIMIT子句之前。 - 默认排序:如果不指定
ASC或DESC,默认为ASC(升序)。
ii. 核心用法
单列排序
-- 按工资升序排列
SELECT name, salary FROM employees ORDER BY salary;-- 按入职日期降序排列
SELECT name, hire_date FROM employees ORDER BY hire_time DESC;
多列排序
按优先级依次排序,用逗号分隔:
-- 先按部门升序,再按工资降序
SELECT name, department, salary
FROM employees
ORDER BY department ASC, salary DESC;
表示先按照部门排序,部门一样的再按照薪资排序。
(4)limit子句
MySQL 的 LIMIT 子句常与 ORDER BY 结合使用,用于在排序后的结果中筛选出特定范围的数据(如分页查询、获取前 N 条记录)。以下是两者的协同用法和关键细节:
i. 基本语法
SELECT 列名
FROM 表名
[WHERE 条件]
ORDER BY 排序列 [ASC|DESC]
LIMIT [偏移量,] 行数;
-
执行顺序:
WHERE→ORDER BY→LIMIT
(先过滤数据,再排序,最后截取结果) -
典型场景:
- 分页查询(如每页 10 条)
- 获取前 N 名(如销量最高的前 5 个商品)
ii. 核心用法
(1) 获取前 N 条记录
-- 获取工资最高的前 3 名员工
SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 3;
(2) 分页查询
-- 每页 10 条,查询第 3 页(偏移量 = (页码-1)*每页行数)
SELECT *
FROM products
ORDER BY price ASC
LIMIT 20, 10; -- 偏移量为 20 条,取接下来的 10 条
3. Update 操作(更新数据)
对查询到的结果进行列值更新
语法:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE ...
ORDER BY ...
LIMIT ...;
实际场景:
-
修改用户邮箱:
UPDATE users SET email = 'new@qq.com' WHERE id = 1; -- 明确指定条件,避免全表更新!不指明条件导致全表更新是致命的!
-
记录用户最后登录时间:
UPDATE users SET last_login = NOW() WHERE username = 'ddsm'; -
批量禁用长时间未登录用户:
UPDATE users SET is_active = 0 WHERE last_login < '2020-01-01';
4. Delete 操作(删除数据)
语法:
DELETE FROM table_name WHERE ... ORDER BY ... LIMIT ...;
实际场景:用户注销账号
-- 物理删除(谨慎操作!)
DELETE FROM users WHERE id = 1;-- 实际项目中更推荐软删除,如果误删还可以找回数据
UPDATE users SET is_active = 0 WHERE id = 1;
建议:
- 生产环境优先使用软删除(通过
is_active或deleted_at标记)。 - 删除前检查关联数据(如用户订单需级联处理,这涉及到
外键约束,在以后的讲解中会逐渐详解)。
注意:
没有where子句的删除,将删除整张表的数据;但是表的结构不变;此外auto_increment不会归0;- 删除表内数据的另一种方法是
truncate tb_name;
特点是只能对整张表进行操作,不能对部分数据操作。由于mysql不对数据操作,因而比delete更快。truncate在删除的时候,并不会经过真正的事务,所以无法回滚。此外auto_increment会被重置。
三、总结
- Create:
INSERT实现数据写入,注意唯一性约束。 - Retrieve:
SELECT灵活组合DISTINCT、WHERE、ORDER BY、LIMIT满足查询需求。 - Update:
UPDATE配合精确条件,避免误操作。 - Delete:优先软删除,物理删除需事务+备份。
完
转载请注明出处

相关文章:
[MySQL初阶]MySQL(4)基本查询
标题:[MySQL初阶]MySQL(4)基本查询 水墨不写bug 文章目录 一. 数据表设计二、对数据表的操作1. Create 操作(插入数据)查看最近受影响的行数: 2. Retrieve 操作(读取数据)࿰…...
基于STM32的智能家居蓝牙系统(论文+源码)
1总体方案设计 本次基于STM32的智能家居蓝牙系统,其系统总体架构如图2.1所示,采用STM32f103单片机作为控制器,通过DHT11传感器实现温湿度检测,MQ-2烟雾传感器实现烟雾检测,光敏电阻实现光照检测,同时将数据…...
QTS单元测试框架
1.QTS单元测试框架介绍 目前QTS项目采用C/C语言,而CppUnit就是xUnit家族中的一员,它是一个专门面向C的单元测试框架。因此,QTS采用CppUnit测试框架是比较理想的选择。 CppUnit按照层次来管理测试,最底层的就是TestCase,当有了几个TestCase以后,可以将它们组织成Te…...
《水利水电安全员考试各题型对比分析及应对攻略》
《水利水电安全员考试各题型对比分析及应对攻略》 单选题: 特点:四个选项中只有一个正确答案,相对难度较小。主要考查对基础知识的掌握程度。 应对攻略:认真审题,看清题目要求。对于熟悉的知识点,直接选择…...
sqlite3 c++ client选择; c++环境搭建 : abseil-cpp | fnc12/sqlite_orm
sqlite3 c client选择 今日20250305 2.4K星: 7月前最后提交核心: SRombauts/SQLiteCpp.git : 薄封装、命令式sql、非orm、支持事务2.4K星: 1月前最后提交核心: fnc12/sqlite_orm.git : 厚封装、非侵入、真orm、真泛型、类型复杂、支持事务、报错信息不完整(启动事…...
IMX6ULL驱动开发uboot篇02
目录 网络操作 第零步:先将网线跟电脑接好,打开串口连接到开发板上,然后上电,让UBoot停下来 第一步:查看我们的网线构成的虚拟子网是哪一个 第二步:我们必须把虚拟机的网卡模式从NAT改成桥接,…...
智谱AI-FunctionCall
智谱AI-FunctionCall 编写FuncationCall大模型的函数调用,先直观的感受一下的感受下FunctionCall的魅力 文章目录 智谱AI-FunctionCall[toc]1-参考网址2-思路整理3-代码拆件1-[非核心]两个业务函数2-[非核心]业务函数的JsonSchema定义3-[核心]FunctionCall的调用1-打…...
数据保险箱:备份文件的关键价值与自动化实践
在信息化社会,数据已经成为我们生活、工作和学习的核心组成部分。无论是企业机密、个人隐私,还是创意作品、研究数据,它们都以数字形式存在于我们的电子设备中。然而,数据如同脆弱的玻璃制品,稍有不慎就可能面临丢失或…...
数字电路基础——逻辑门
逻辑门是数字电子技术中的基本构建块。这些组件用于对1和0进行操作,可以将它们组合起来创建其他构建块,并设计出如锁存器、触发器、加法器、移位寄存器等电路。 七种主要的逻辑门类型: 一、基本逻辑门 1.1 与门(AND gate) 1.1.1 逻辑运算规则 与门有多个输入端和一个输出…...
爬虫逆向:脱壳工具BlackDex的详细使用
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、BlackDex简介二、下载与安装三、基本使用步骤3.1 启动BlackDex3.2 导入目标APK文件3.3 开始脱壳3.4 查看脱壳结果四、后续分析4.1 使用 JADX 反编译 Dex 文件4.2 使用 Apktool 反编译 Dex 文件4.3 JD-GUI4.4 dex2ja…...
JavaScript中的Math()
目录 一、Math() 1.1floor() 1.2ceil() 1.3round() 1.4random() 1.5max() 1.6min() 1.7pow() 1.8sqrt() 1.9trunc() 二、parseFloat() 三、toFixed() 四、toString() 4.1Number类型转换为字符串 4.2Boolean类型转换为字符串 4.3Date()类型转换为字符串 4.4Arr…...
深度学习模型Transformer初步认识整体架构
第一章:人工智能之不同数据类型及其特点梳理 第二章:自然语言处理(NLP):文本向量化从文字到数字的原理 第三章:循环神经网络RNN:理解 RNN的工作机制与应用场景(附代码) 第四章:循环神经网络RNN、LSTM以及GR…...
【从模仿到超越:AIGC的崛起与AGI的终极梦想】
一、基本概念 1. AIGC(人工智能生成内容) 定义:基于人工智能技术生成文本、图像、音频、视频等数字内容的方法。技术基础:依赖深度学习模型(如GPT、DALL-E、Stable Diffusion)和自然语言处理(…...
标量、向量、矩阵与张量:从维度理解数据结构的层次
在数学和计算机科学中,维度描述了数据结构的复杂性,而标量、向量、矩阵、张量则是不同维度的数据表示形式。它们的关系可以理解为从简单到复杂的扩展,以下是详细解析: 1. 标量(Scalar):0维数据 …...
windows 上删除 node_modules
在 Windows 11 上,你可以通过命令行来删除 node_modules 文件夹并清除 npm 缓存。以下是具体步骤: 删除 node_modules 打开命令提示符(Command Prompt)或终端(PowerShell)。 导航到项目目录。你可以使用 …...
单例模式的五种实现方式
1、饿汉式 ①实现:在类加载的时候就初始化实例 ②优点:线程安全 ③缺点:实例在类加载的时候创建,可能会浪费资源 //饿汉式 public class EagerSingleton{private EagerSingleton(){} //私有构造方法private static EagerSingle…...
启智平台华为昇腾910B使用MS-Swift微调Janus-Pro-7/1B
最近想要微调一下DeepSeek出品的Janus多模态大模型 利用启智平台的昇腾910B国产计算卡进行大模型的微调 查看了一下MS-Swift支持了Janus模型的微调,LLamafactory好像暂时还不支持该模型的微调 看到了MS-Swift有单独对昇腾的支持,因此首先要安装swift&…...
蓝桥试题:传球游戏(二维dp)
一、题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。 游戏规则是这样的:n 个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球࿰…...
迷你世界脚本小地图接口:Mapmark
小地图接口:Mapmark 彼得兔 更新时间: 2023-10-25 10:33:48 具体函数名及描述如下: 序号 函数名 函数描述 1 newShape(...) 新增一个形状(线,矩形,圆形) 2 deleteShape(...) 删除一个形状 3 setShapeColor(...) 设置…...
从零开始在Windows使用VMware虚拟机安装黑群晖7.2系统并实现远程访问
文章目录 前言1.软件准备2. 安装VMware17虚拟机3.安装黑群晖4. 安装群晖搜索助手5. 配置黑群晖系统6. 安装内网穿透6.1 下载cpolar套件6.2 配置群辉虚拟机6.3 配置公网地址6.4 配置固定公网地址 总结 前言 本文主要介绍如何从零开始在Windows系统电脑使用VMware17虚拟机安装黑…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
