📄 一句话概括
DELETE 删表里符合条件的行——柜子还在、东西拿走;和 DROP TABLE(柜子一起拆)、UPDATE 忘 WHERE(全表改)组成本章三大危险现场。
📝 本节和前面几节的关系
3-11 改记录,本节删记录——【操作家族】的最后一员。删与改共用电门:WHERE 忘写都是全表遭殃,本节讲完操作家族齐活。
一、DELETE 的语法骨架
DELETE FROM 表名 WHERE 条件;
- 只删符合条件的行,表结构纹丝不动
- 忘 WHERE = 清空全表(柜子还在、东西全没)
-- 准备块(没建表先跑 3-6 的准备块)
-- 删掉学号 4 的记录
DELETE FROM students WHERE id = 4;
二、三种【删】的正名
| 命令 | 删什么 | 类比 |
|---|---|---|
DELETE FROM students WHERE ... |
表还在,删符合条件的行 | 清掉柜子里几件东西 |
DELETE FROM students;(无 WHERE) |
表还在,行全空 | 柜子腾空 |
DROP TABLE students;(3-5) |
表本身+数据 | 柜子整个拆走 |
1-7 说过:订单取消多改状态不真删——商业数据要追溯,真删(DELETE/DROP)在日常业务里是少数派;【删】之前先想一句【真的要物理删,还是标记作废?】
三、动手 Demo:删一步验一步
-- ① 先 SELECT 确认要删谁(删前看一眼,救命习惯)
SELECT * FROM students WHERE id = 4; -- 赵六
-- ② 删
DELETE FROM students WHERE id = 4;
-- ③ 验:只剩 4 行,赵六没了
SELECT * FROM students;
-- ④ 条件删:删 1 班 90 分以下的(张三 85 中弹)
DELETE FROM students WHERE class = 1 AND score < 90;
-- ⑤ 删不存在的行:0 行受影响,不报错
DELETE FROM students WHERE id = 999;
-- ⑥ 删空全表(演示用;跑完重建准备块)
DELETE FROM students;
SELECT * FROM students; -- 0 行,表还在
看到什么算成功:③剩 4 行;⑤静默通过;⑥输出 0 行但查询不报错——表还活着,这才是 DELETE 与 DROP 的分水岭。
四、30 秒实验
删空后再插一条:
DELETE FROM students;
INSERT INTO students VALUES (1, '张三', 1, 85);
SELECT * FROM students; -- 张三回来了
——DELETE 后表可以继续用;同样的流程换成 DROP TABLE,第二条 INSERT 直接报【no such table】。两种【删】的命运分岔,亲手走一遍。
五、常见误区
- "DELETE FROM students; 会连表一起删" —— 那是 DROP TABLE 的活;DELETE 只清行、留结构。
- "删错的行能撤销" —— SQL 没有【撤销】;能救你的只有备份或事务机制(后续章节)。所以删前先 SELECT 看一眼是铁习惯。
- "日常业务大量用 DELETE" —— 恰恰相反:正式系统爱用【状态标记作废】(1-7 的取消订单),真删是例外。
自测三问(点开对答案)
1. DELETE、DELETE 全表、DROP TABLE 三者的范围? **删符合条件的行/清空所有行但表在/表连数据全灭**。 2. 删错能撤销吗? **不能**;靠删前 SELECT 确认+备份。 3. 业务系统取消订单为什么多用改状态而不是 DELETE? **数据要可追溯**——物理删了就查无对证。- ☐ 下一节(3-13 ORDER BY-排列记录)
相关笔记
- UPDATE-更新记录 —— 上一节:改与删共用电门——WHERE 忘写都是全表遭殃
- 🗄️ 数据库基础 · 索引 —— 全课路线图