呜呜呜,其实我已经写好了这个博客,附有每个功能的截图和详细介绍,但是我一不小心给删了,找不回来了,太伤心了,写了蛮久的,蚌埠住了,我只能让ai帮我写一篇了,因为我真的累了,这太伤我心了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(不过我会过目一遍ai写的博客,确保全部都谈论到才会发布)
本文基于实际案例讲解 MySQL 中最核心的操作:更新、删除、统计、分组
建议搭配实际数据库操作练习
🔄 6.3 Update(更新数据)
✨ 基本语法
UPDATE table_name
SET column = value [, column = value ...]
[WHERE ...]
[ORDER BY ...]
[LIMIT ...];
👉 本质:对查询结果进行修改
📌 示例1:修改单个字段
👉 将"孙悟空"的数学成绩改为 80 分
UPDATE exam_result
SET math = 80
WHERE name = '孙悟空';
🧾 更新前:
| name | math |
|---|---|
| 孙悟空 | 78 |
🧾 更新后:
| name | math |
|---|---|
| 孙悟空 | 80 |
📌 示例2:同时修改多个字段
UPDATE exam_result
SET math = 60, chinese = 70
WHERE name = '曹孟德';
👉 一条 SQL 更新多个列
📌 示例3:基于原值更新(🔥常考)
👉 总分倒数前三名,数学 +30
UPDATE exam_result
SET math = math + 30
ORDER BY chinese + math + english
LIMIT 3;
💡 核心点
-
❗ MySQL 不支持
math += 30 -
✅ 必须写成:
math = math + 30
⚠️ 示例4:全表更新(危险操作)
UPDATE exam_result
SET chinese = chinese * 2;
👉 没有 WHERE → 所有数据都会被修改
⚠️ 实际开发中必须谨慎!
❌ 6.4 Delete(删除数据)
📌 基本语法
DELETE FROM table_name
[WHERE ...]
[ORDER BY ...]
[LIMIT ...];
🧨 示例1:删除一条数据
DELETE FROM exam_result
WHERE name = '孙悟空';
💣 示例2:删除整张表
DELETE FROM table_name;
👉 特点:
-
数据被删除
-
自增 id 不会重置
⚡ TRUNCATE(更狠)
TRUNCATE table_name;
🔍 DELETE vs TRUNCATE
| 对比项 | DELETE | TRUNCATE |
|---|---|---|
| 删除方式 | 一行一行删 | 直接清空 |
| 是否可回滚 | ✅ 可以 | ❌ 不可以 |
| 是否重置自增 | ❌ 不重置 | ✅ 重置 |
| 速度 | 慢 | 非常快 |
👉 一句话总结:
TRUNCATE = "直接把表砍了重建"
📥 6.5 插入查询结果(去重经典写法🔥)
🎯 场景:去重数据
原表(有重复)
| id | name |
|---|---|
| 100 | aaa |
| 100 | aaa |
| 200 | bbb |
解决方案
① 创建新表
CREATE TABLE new_table LIKE old_table;
② 去重插入
INSERT INTO new_table
SELECT DISTINCT * FROM old_table;
③ 原子替换(高阶技巧🔥)
RENAME TABLE old_table TO backup_table,
new_table TO old_table;
👉 完成"无感知去重"
📊 6.6 聚合函数(统计分析核心)
📌 常用函数
| 函数 | 作用 |
|---|---|
| COUNT | 数量 |
| SUM | 求和 |
| AVG | 平均值 |
| MAX | 最大值 |
| MIN | 最小值 |
📌 示例1:统计人数
SELECT COUNT(*) FROM students;
👉 NULL 不影响结果
📌 示例2:统计有 qq 的人数
SELECT COUNT(qq) FROM students;
👉 NULL 会被忽略
📌 示例3:去重统计
SELECT COUNT(DISTINCT math) FROM exam_result;
📌 示例4:总分
SELECT SUM(math) FROM exam_result;
📌 示例5:平均总分
SELECT AVG(chinese + math + english) FROM exam_result;
📌 示例6:最大/最小
SELECT MAX(english) FROM exam_result;
SELECT MIN(math) FROM exam_result WHERE math > 70;
📦 6.7 GROUP BY(分组查询🔥重点)
✨ 基本语法
SELECT column, aggregate_function
FROM table
GROUP BY column;
📌 示例1:按部门统计平均工资
SELECT deptno, AVG(sal), MAX(sal)
FROM EMP
GROUP BY deptno;
📌 示例2:多字段分组
SELECT deptno, job, AVG(sal)
FROM EMP
GROUP BY deptno, job;
📌 示例3:分组后筛选(🔥重点)
SELECT deptno, AVG(sal) AS avg_sal
FROM EMP
GROUP BY deptno
HAVING avg_sal < 2000;
❗ WHERE vs HAVING
| 条件 | 作用阶段 |
|---|---|
| WHERE | 分组前 |
| HAVING | 分组后 |
👉 面试常问!
SQL执行顺序(面试必考🔥)
FROM → ON → JOIN → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT
🎯 总结(建议背下来)
🧩 一张图理解 CRUD
| 操作 | SQL |
|---|---|
| 增 | INSERT |
| 查 | SELECT |
| 改 | UPDATE |
| 删 | DELETE |
🔥 高频面试点
-
UPDATE 是否可以不加 WHERE?(可以,但危险)
-
DELETE 和 TRUNCATE 区别
-
COUNT(*) 和 COUNT(列) 区别
-
WHERE vs HAVING
-
GROUP BY 必须配合聚合函数
虽然文章没了,但是我文章里面用的截图还在,下面是对应操作的所有截图













