MySQL之增删改查(CRUD)使用及说明

 更新时间:2026年04月23日 14:19:41   作者:当战神遇到编程  
文章主要述了CRUD操作,即数据库的增删查改四种核心操作,具体介绍了每种操作的语法、应用场景和注意事项,如插入表操作、条件查询、排序查询、分页查询等,文章还提供了大量示例,帮助读者更好地理解和掌握这些操作

一、什么是 CRUD?

CRUD 是数据库最核心的四种操作:

字母含义SQL语句
CCreate(新增)INSERT
RRetrieve(查询)SELECT
UUpdate(修改)UPDATE
DDelete(删除)DELETE

二、准备测试表

CREATE TABLE student(
    id INT,
    name VARCHAR(20),
    age INT
);

三、C:INSERT 新增数据

向表中插入记录。

1.插入一条数据

INSERT INTO student VALUES(1,'Tom',18);

2.指定字段插入

INSERT INTO student(id,name) VALUES(2,'Jerry');

3.插入多条数据

INSERT INTO student VALUES(3,'Alice',20),(4,'Bob',19);

4.插入查询结果

当你需要把一张表的数据“复制”到另一张表时使用。

-- 目标表(用于备份或迁移)
CREATE TABLE student_backup(
    id INT,
    name VARCHAR(20),
    age INT
);

场景一:两张表结构完全一样(快速全量备份)

如果你只是想做一个完全一致的备份,可以使用 * 简写。

-- 只要 student_backup 的字段数量、顺序、类型与 student 完全一致,即可使用
INSERT INTO student_backup SELECT * FROM student WHERE age > 18;

场景二:指定字段插入(灵活迁移)

如果两张表结构不同,或者你只想复制其中某几列,必须显式指定列名。

-- 仅将 id 和 name 备份,age 字段在目标表中可能是默认值或 NULL
INSERT INTO student_backup (id, name) 
SELECT id, name FROM student WHERE age > 18;

四、R:SELECT 查询数据

查询表中的记录。

1.查询全部数据

SELECT * FROM student;

2.查询指定字段

SELECT name,age FROM student;

3.查询时使用表达式

SELECT name, age + 1 AS next_age FROM student;

说明:

  • 表达式 (age + 1):实时计算结果,不会修改数据库中的原始数据。
  • 别名 (next_age):给结果集中的列起个新名字,方便查看。

4.去重查询

SELECT DISTINCT age FROM student;

说明:

  • 作用:过滤掉结果集中的重复行。
  • 注意:这只是展示效果,数据库里的原始记录并不会被删除。

5.条件查询

  • 比较运算符:
运算符说明
>, >=, <, <=大于、大于等于、小于、小于等于
=等于
!=, <>不等于
BETWEEN … AND …范围查询
IN(…)在指定集合中
IS NULL判断为空
IS NOT NULL判断不为空
LIKE模糊查询
  • 逻辑运算符:
运算符说明
AND多个条件同时成立
OR任意一个条件成立
NOT条件取反

1.查询年龄大于18

SELECT * FROM student WHERE age > 18;

2.查询姓名为Tom

SELECT * FROM student WHERE name = 'Tom';

3.多条件查询

SELECT * FROM student WHERE age >= 18 AND age <= 20;

4.范围查询

SELECT * FROM student WHERE age BETWEEN 18 AND 20;
  • 闭区间:包含边界值,等同于 age >= 18 AND age <= 20

5.集合查询

SELECT * FROM student WHERE name IN ('Tom','Jerry');
  • 逻辑:匹配括号内任意一个值即可。
  • 优势:比写一长串的 OR 更加简洁高效。

6.模糊查询

SELECT * FROM student WHERE name LIKE 'T%';

说明:

  • %:任意多个字符
  • _:任意一个字符

7.空值查询

SELECT * FROM student WHERE email IS NULL;

6.排序查询

排序时,需要选取一个或多个列作为比较依据。

1.基础语法

-- 升序(默认):从小到大排。ASC 可省略。
SELECT * FROM student ORDER BY age ASC; 

-- 降序:从大到小排。
SELECT * FROM student ORDER BY age DESC;

-- 使用表达式别名排序(ORDER BY 在 SELECT 之后执行,所以认识别名)
SELECT name, age + 1 AS next_age FROM student ORDER BY next_age DESC;

2.多列排序(优先级)

-- 先按id升序,id相同时,再按age降序
SELECT * FROM student ORDER BY id ASC, age DESC;

核心要点

顺序未定义

  • 重要
  • 如果没有指定 ORDER BY,数据库返回结果的顺序是不可靠且未定义的。
  • 为了确保业务逻辑(如分页显示)的一致性,务必手动指定排序字段。

针对行排序

  • 排序是针对整行记录的。
  • 根据某一列排好序后,该行所有的字段会整体跟着移动。

排序关键字控制

  • ASC (Ascending):升序,默认值。如果不写,数据库就默认从小到大排。
  • DESC (Descending):降序,必须显式书写,实现从大到小排。

NULL 的特殊性

  • 在 SQL 中,NULL 被视为最小值
  • 升序 (ASC) 时 NULL 在最前,降序 (DESC) 时 NULL 在最后。

多列排序的优先级

  • 从左往右看:先按第一列排序,只有当第一列值完全相同(平局)时,才会参考第二列进行内部排序。

物理存储不变

  • 排序只是改变了结果的展示顺序,不影响数据库中数据的物理存储顺序

7.分页查询

当数据库表中有成千上万条数据时,一次性全部查出来不仅速度慢,用户也看不过来。分页查询的作用就是按需分批取出数据。

-- 【格式 A】取前 n 条
SELECT * FROM student LIMIT 2;

-- 【格式 B】跳过 s 条,取 n 条
SELECT * FROM student LIMIT 1, 2;

-- 【格式 C】使用 OFFSET 关键字(逻辑最清晰,推荐!)
-- 效果:同样是跳过 1 条取 2 条
SELECT * FROM student LIMIT 2 OFFSET 1;

直白逻辑(跳过与取出)

  • 第一个数字:是你打算“扔掉”不要的数量(偏移量 Offset)。
  • 第二个数字:是扔掉后你要“连续拿走”的数量(行数 Count)。
  • 记住: 数据库的下标是从 0 开始的。跳过 0 条 = 从第 1 条开始取。

边界情况:没数据了怎么办?

  • 如果 LIMIT 请求的范围超出了表中的实际数据量(例如:表只有 5 条,你写 LIMIT 10, 5):
  • 结果:数据库不会报错,也不会返回带 NULL 的行,而是直接返回空结果集

物理存储不变:最后再次强调,分页只是为了展示。它不会删除或移动数据库里的原始数据。

实战:网页分页公式

  • 假设每页显示 pageSize 条,当前是第 pageNum 页:
  • SQL 公式:LIMIT (pageNum - 1) * pageSize, pageSize

八、U:UPDATE 修改数据

修改数据库服务器硬盘上的原始数据。

修改Tom年龄为20

UPDATE student SET age = 20 WHERE name = 'Tom';

同时修改多个字段

UPDATE student SET name = 'Lucy', age = 21 WHERE id = 1;

注意:

  • 不加 WHERE 会修改整张表。

九、D:DELETE 删除数据

删除Tom

DELETE FROM student WHERE name = 'Tom';

删除全部数据

DELETE FROM student;

注意:

  • 不加 WHERE 会删除所有记录。

十、总结速记

  • 新增:INSERT
  • 查询:SELECT
  • 修改:UPDATE
  • 删除:DELETE
  • 条件:WHERE
  • 排序:ORDER BY
  • 分页:LIMIT

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Mysql8.0使用窗口函数解决排序问题

    Mysql8.0使用窗口函数解决排序问题

    窗口的概念非常重要,它可以理解为记录集合,窗口函数也就是在满足某种条件的记录集合上执行的特殊函数。这篇文章主要介绍了Mysql8.0使用窗口函数解决排序问题,需要的朋友可以参考下
    2020-01-01
  • SQL Server 2005 安装遇到的错误提示和解决方法

    SQL Server 2005 安装遇到的错误提示和解决方法

    在安装SQL Server 2005时有时会出现意想不到的问题,如IIS,性能计数器,OWC11,无法配置外围应用的问题,下面笔者分享一下在安装SQL Server 2005时常见问题解决方法
    2014-01-01
  • MySQL海量数据(2亿级表字段)无损更新方案

    MySQL海量数据(2亿级表字段)无损更新方案

    在大型互联网应用中,数据表动辄达到亿级规模,当需要对生产环境中的海量表进行字段更新时,如何在不影响业务正常读写的情况下完成任务,是每个DBA和开发者都会面临的挑战,本文将以一个真实案例详细讲解四种渐进式更新方案及其实现原理,需要的朋友可以参考下
    2025-04-04
  • MySQL安装(D盘)教程

    MySQL安装(D盘)教程

    本文详细介绍了MySQL的安装步骤,包括下载安装程序、自定义安装、设置密码、应用配置以及启动MySQL,希望对大家有所帮助
    2026-02-02
  • 执行sql报错only_full_group_by的2种解决方法

    执行sql报错only_full_group_by的2种解决方法

    这篇文章主要给大家介绍了关于执行sql报错only_full_group_by的2种解决方法,报错only_full_group_by是 MySQL数据库中的一个错误,文中通过代码将解决的办法介绍的非常详细,需要的朋友可以参考下
    2024-05-05
  • MySQL不就是多表查询吗

    MySQL不就是多表查询吗

    这篇文章主要介绍了MySQL多表查询相关知识,今天我们学习要对多张表进行相关操作,相比较于单一的表来说,多张表操作相对复杂一些,本文给大家介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • MySQL8.0 Redo Log 归档与禁用实战指南

    MySQL8.0 Redo Log 归档与禁用实战指南

    MySQL8.0新增的Redo Log归档与禁用功能,分别解决了备份时日志丢失问题和数据导入时 IO 开销问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-04-04
  • Ubuntu 18.04配置mysql以及配置远程连接的步骤

    Ubuntu 18.04配置mysql以及配置远程连接的步骤

    这篇文章主要给大家介绍了关于Ubuntu 18.04配置mysql以及配置远程连接的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • Mysql中xtrabackup备份的实现

    Mysql中xtrabackup备份的实现

    Xtrabackup是Percona团队开发的用于MySQL数据库物理热备份的开源备份工具,本文就来介绍一下Mysql中xtrabackup备份的实现,就有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • linux下mysql的安装步骤

    linux下mysql的安装步骤

    本文分步骤给大家介绍了linux下mysql的安装步骤及执行命令,需要的朋友可以参考下
    2018-03-03

最新评论