MySQL之增删改查(CRUD)使用及说明
一、什么是 CRUD?
CRUD 是数据库最核心的四种操作:
| 字母 | 含义 | SQL语句 |
|---|---|---|
| C | Create(新增) | INSERT |
| R | Retrieve(查询) | SELECT |
| U | Update(修改) | UPDATE |
| D | Delete(删除) | 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
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SQL Server 2005 安装遇到的错误提示和解决方法
在安装SQL Server 2005时有时会出现意想不到的问题,如IIS,性能计数器,OWC11,无法配置外围应用的问题,下面笔者分享一下在安装SQL Server 2005时常见问题解决方法2014-01-01
执行sql报错only_full_group_by的2种解决方法
这篇文章主要给大家介绍了关于执行sql报错only_full_group_by的2种解决方法,报错only_full_group_by是 MySQL数据库中的一个错误,文中通过代码将解决的办法介绍的非常详细,需要的朋友可以参考下2024-05-05
Ubuntu 18.04配置mysql以及配置远程连接的步骤
这篇文章主要给大家介绍了关于Ubuntu 18.04配置mysql以及配置远程连接的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2018-07-07


最新评论