文章目录
- [一、什么是 CRUD?](#一、什么是 CRUD?)
- 二、准备测试表
- [三、C:INSERT 新增数据](#三、C:INSERT 新增数据)
- [四、R:SELECT 查询数据](#四、R:SELECT 查询数据)
- [八、U:UPDATE 修改数据](#八、U:UPDATE 修改数据)
- [九、D:DELETE 删除数据](#九、D:DELETE 删除数据)
- 十、总结速记

文章作者:当战神遇到编程
文章专栏:MySQL
欢迎大家点赞👍评论📝收藏⭐文章



一、什么是 CRUD?
CRUD 是数据库最核心的四种操作:
| 字母 | 含义 | SQL语句 |
|---|---|---|
| C | Create(新增) | INSERT |
| R | Retrieve(查询) | SELECT |
| U | Update(修改) | UPDATE |
| D | Delete(删除) | DELETE |
二、准备测试表
sql
CREATE TABLE student(
id INT,
name VARCHAR(20),
age INT
);
三、C:INSERT 新增数据
向表中插入记录。
1.插入一条数据
sql
INSERT INTO student VALUES(1,'Tom',18);
2.指定字段插入
sql
INSERT INTO student(id,name) VALUES(2,'Jerry');
3.插入多条数据
sql
INSERT INTO student VALUES(3,'Alice',20),(4,'Bob',19);
4.插入查询结果
当你需要把一张表的数据"复制"到另一张表时使用。
sql
-- 目标表(用于备份或迁移)
CREATE TABLE student_backup(
id INT,
name VARCHAR(20),
age INT
);
场景一:两张表结构完全一样(快速全量备份)
如果你只是想做一个完全一致的备份,可以使用 * 简写。
sql
-- 只要 student_backup 的字段数量、顺序、类型与 student 完全一致,即可使用
INSERT INTO student_backup SELECT * FROM student WHERE age > 18;
场景二:指定字段插入(灵活迁移)
如果两张表结构不同,或者你只想复制其中某几列,必须显式指定列名。
sql
-- 仅将 id 和 name 备份,age 字段在目标表中可能是默认值或 NULL
INSERT INTO student_backup (id, name)
SELECT id, name FROM student WHERE age > 18;
四、R:SELECT 查询数据
查询表中的记录。
1.查询全部数据
sql
SELECT * FROM student;
2.查询指定字段
sql
SELECT name,age FROM student;
3.查询时使用表达式
sql
SELECT name, age + 1 AS next_age FROM student;
说明:
- 表达式 (age + 1):实时计算结果,不会修改数据库中的原始数据。
- 别名 (next_age):给结果集中的列起个新名字,方便查看。
4.去重查询
sql
SELECT DISTINCT age FROM student;
说明:
- 作用:过滤掉结果集中的重复行。
- 注意:这只是展示效果,数据库里的原始记录并不会被删除。
5.条件查询
- 比较运算符:
| 运算符 | 说明 |
|---|---|
| >, >=, <, <= | 大于、大于等于、小于、小于等于 |
| = | 等于 |
| !=, <> | 不等于 |
| BETWEEN ... AND ... | 范围查询 |
| IN(...) | 在指定集合中 |
| IS NULL | 判断为空 |
| IS NOT NULL | 判断不为空 |
| LIKE | 模糊查询 |
- 逻辑运算符:
| 运算符 | 说明 |
|---|---|
| AND | 多个条件同时成立 |
| OR | 任意一个条件成立 |
| NOT | 条件取反 |
1.查询年龄大于18
sql
SELECT * FROM student WHERE age > 18;
2.查询姓名为Tom
sql
SELECT * FROM student WHERE name = 'Tom';
3.多条件查询
sql
SELECT * FROM student WHERE age >= 18 AND age <= 20;
4.范围查询
sql
SELECT * FROM student WHERE age BETWEEN 18 AND 20;
- 闭区间:包含边界值,等同于 age >= 18 AND age <= 20
5.集合查询
sql
SELECT * FROM student WHERE name IN ('Tom','Jerry');
- 逻辑:匹配括号内任意一个值即可。
- 优势:比写一长串的 OR 更加简洁高效。
6.模糊查询
sql
SELECT * FROM student WHERE name LIKE 'T%';
说明:
- %:任意多个字符
- _:任意一个字符
7.空值查询
sql
SELECT * FROM student WHERE email IS NULL;
6.排序查询
排序时,需要选取一个或多个列作为比较依据。
1.基础语法
sql
-- 升序(默认):从小到大排。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.多列排序(优先级)
sql
-- 先按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.分页查询
当数据库表中有成千上万条数据时,一次性全部查出来不仅速度慢,用户也看不过来。分页查询的作用就是按需分批取出数据。
sql
-- 【格式 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;
-
执行顺序:
○ LIMIT 是 SQL 语句执行过程中的最后一步 。
○ 顺序是:FROM -> WHERE -> SELECT -> ORDER BY -> LIMIT。
-
直白逻辑(跳过与取出) :
○ 第一个数字 :是你打算"扔掉"不要的数量(偏移量 Offset)。
○ 第二个数字 :是扔掉后你要"连续拿走"的数量(行数 Count)。
○ 记住: 数据库的下标是从 0 开始的。跳过 0 条 = 从第 1 条开始取。
-
边界情况:没数据了怎么办?
○ 如果 LIMIT 请求的范围超出了表中的实际数据量(例如:表只有 5 条,你写 LIMIT 10, 5):
○ 结果:数据库不会报错 ,也不会返回带 NULL 的行,而是直接返回空结果集。
-
物理存储不变:最后再次强调,分页只是为了展示。它不会删除或移动数据库里的原始数据。
-
实战:网页分页公式
○ 假设每页显示 pageSize 条,当前是第 pageNum 页:
○ SQL 公式:LIMIT (pageNum - 1) * pageSize, pageSize
八、U:UPDATE 修改数据
修改数据库服务器硬盘上的原始数据。
修改Tom年龄为20
sql
UPDATE student SET age = 20 WHERE name = 'Tom';
同时修改多个字段
sql
UPDATE student SET name = 'Lucy', age = 21 WHERE id = 1;
注意:
- 不加 WHERE 会修改整张表。
九、D:DELETE 删除数据
删除Tom
sql
DELETE FROM student WHERE name = 'Tom';
删除全部数据
sql
DELETE FROM student;
注意:
- 不加 WHERE 会删除所有记录。
十、总结速记
新增:INSERT
查询:SELECT
修改:UPDATE
删除:DELETE
条件:WHERE
排序:ORDER BY
分页:LIMIT