MySQL核心篇:增删改查(CRUD)

文章目录

文章作者:当战神遇到编程

文章专栏: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

相关推荐
白帽攻防录18 小时前
SRC 挖洞:Roundcube 预认证 SQL 注入深度复盘,CVE-2026-48842 preg_replace 转义绕过怎么打穿邮件系统
网络·数据库·sql·网络安全·sql注入
꯭自꯭闭꯭19 小时前
达梦SQL优化相关
linux·运维·数据库·sql
nhdh19 小时前
B+树揭秘:MySQL索引核心原理全解析
数据结构·b树·mysql
对空六课19 小时前
支持注意力分析的热力图工具有哪些?
前端·数据库·数据分析
南京码讯光电技术有限公司19 小时前
How to Design an Antenna System for an Industrial WiFi Module
数据库·人工智能
lusklusklusk20 小时前
Oracle数据库基础之2_体系结构
数据库·oracle
可乐ea21 小时前
从第一性原理构建 AI Agent:提示词、工具、技能与记忆全解剖
数据库·人工智能·工具调用·ai智能体·提示词工程·agent开发·智能体记忆
余槐i21 小时前
MySQL 深分页从 4 秒到 60 毫秒:延迟关联减少回表的实测与代价
mysql·性能优化·sql优化·执行计划·慢查询优化
东方护航数据恢复(深圳)21 小时前
医疗案例:HIS/PACS 数据库页损坏修复,医院不停诊完成恢复【东方护航数据恢复深圳店】
数据库·数据恢复·医疗·二次开盘
lusklusklusk1 天前
Oracle数据库基础之11_Duplicate和Dataguard和RAC
数据库·oracle