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

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

相关文章

  • mysql存储过程中使用游标的实例

    mysql存储过程中使用游标的实例

    使用MYSQL存储过程,可以实现诸多的功能,下面将为您介绍一个MYSQL存储过程中使用游标的实例
    2014-01-01
  • MySQL全面瓦解之查询的过滤条件详解

    MySQL全面瓦解之查询的过滤条件详解

    这篇文章主要给打大家介绍了关于MySQL全面瓦解之查询的过滤条件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • MySQL中空值和NULL的区别小结

    MySQL中空值和NULL的区别小结

    在 MySQL 中,NULL 值和空值是两个不同的概念,本文主要介绍了MySQL中空值和NULL的区别小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • MySQL去重的方法整理

    MySQL去重的方法整理

    这篇文章主要介绍了MySQL去重的方法整理的相关资料,需要的朋友可以参考下
    2017-07-07
  • mysql中的limit 1 for update的锁类型

    mysql中的limit 1 for update的锁类型

    这篇文章主要介绍了mysql中的limit 1 for update的锁类型,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 基于SQL中SET与SELECT赋值的区别详解

    基于SQL中SET与SELECT赋值的区别详解

    本篇文章是对SQL中SET与SELECT赋值的区别进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • MySQL group by语句如何优化

    MySQL group by语句如何优化

    这篇文章主要介绍了MySQL group by语句如何优化,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-11-11
  • MYSQL中 char 和 varchar的区别

    MYSQL中 char 和 varchar的区别

    这篇文章主要介绍了MYSQL中 char 和 varchar的区别,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-09-09
  • MySQL8.x登陆root用户突然提示mysql_native_password的实现

    MySQL8.x登陆root用户突然提示mysql_native_password的实现

    本文主要介绍了MySQL 8.x登陆root用户突然提示mysql_native_password,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • Windows 10系统下彻底删除卸载MySQL的方法教程

    Windows 10系统下彻底删除卸载MySQL的方法教程

    mysql数据库的重新安装是一个麻烦的问题,很难卸除干净,下面这篇文章主要给大家介绍了关于在Windows 10系统下彻底删除卸载MySQL的方法教程,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07

最新评论