正在加载内容…
MySQL DELETE 删除数据
579 字
3 分钟
MySQL DELETE 删除数据
本文讲解 MySQL 中 DELETE 删除数据的基本语法,说明 WHERE 条件决定删除范围,比较 DELETE 与 TRUNCATE 的差异,并提示先查询确认、备份及外键约束等安全注意事项。
第4章 DELETE 删除数据
4.1 DELETE 的基本语法
DELETE 用于删除表中已有的记录,语法为:
DELETE FROM 表名 WHERE 条件;它删的是”行”,而不是表结构。例如删除 id 为 3 的学生:
DELETE FROM student WHERE id = 3;4.2 WHERE 条件决定删除范围
和 UPDATE 一样,WHERE 决定了删除哪些行。省略 WHERE 会清空整张表的所有数据,风险极高:
-- 危险!删除 student 表的所有记录DELETE FROM student;安全的做法是先查询确认:
SELECT * FROM student WHERE class_id = 3; -- 先看DELETE FROM student WHERE class_id = 3; -- 再删4.3 条件删除与批量删除
DELETE 支持用各种条件筛选,例如删除年龄大于 25 或邮箱为空的学生:
DELETE FROM student WHERE age > 25 OR email IS NULL;也可以使用 IN 删除指定的一组记录:
DELETE FROM student WHERE id IN (4, 5, 6);4.4 DELETE 与 TRUNCATE 的区别
两者都能清空表,但机制不同:
| 对比项 | DELETE | TRUNCATE |
|---|---|---|
| 是否可加 WHERE | 可以 | 不可以 |
| 删除范围 | 满足条件的行 | 整张表所有行 |
| 自增主键 | 计数器保留 | 计数器重置 |
| 能否回滚 | 支持(事务中) | 通常不支持 |
| 速度 | 较慢(逐行删) | 快(直接释放) |
TRUNCATE TABLE student; -- 清空表并重置自增4.5 删除流程
flowchart TD
A[定位表] --> B{是否有 WHERE}
B -- 有 --> C[筛选目标行]
B -- 无 --> D[全表记录]
C --> E[逐行删除]
D --> E
E --> F[返回受影响行数]
4.6 注意事项
- 若表被外键引用,删除主表记录可能受约束限制(第 7 章详述)。
- 删除是不可逆操作,重要数据删除前务必备份。
- 正式环境禁用不加 WHERE 的 DELETE,可开启 SQL 安全更新模式加以约束。
4.7 常见问题 Q&A
Q1:DELETE 和 TRUNCATE 该选哪个? A:想按条件删用 DELETE;想快速清空整表并重置自增用 TRUNCATE。TRUNCATE 不可加 WHERE 且通常不能回滚。
Q2:删除的数据能恢复吗? A:在事务未提交前可以回滚,提交后一般无法恢复,重要数据请先备份。
Q3:为什么删除时提示外键约束错误? A:说明该表记录被其他表通过外键引用,需先删除或解除关联数据。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
MySQL DELETE 删除数据
https://mjzy.tech/posts/mysql/04-delete删除数据/ 相关文章 智能推荐
1
MySQL INSERT 插入数据
MySQL 本文讲解MySQL INSERT插入数据,涵盖基本语法、省略字段列表、批量插入、INSERT…SELECT复制数据及约束校验注意事项。
2
MySQL UPDATE 更新数据
MySQL 本文讲解MySQL的UPDATE语法:用SET改字段、WHERE限定行,省WHERE会全表更新;还涉及表达式计算、约束校验和误操作防范。
3
MySQL 数据库与表基础
MySQL 本文介绍MySQL建库建表基础,涵盖数据库分类、常用数据类型及主键、非空、唯一等约束,并用问答说明选型与开发要点。
4
MySQL 联表查询 JOIN
MySQL 本文讲解MySQL联表查询,说明内连接、左右连接及自连接与子查询的用法,并辨析ON与WHERE的区别。
5
MySQL 分组查询与子查询
MySQL 讲解MySQL分组查询与子查询:用GROUP BY配合聚合、HAVING及WITH ROLLUP做分组汇总;子查询按结果分为四类,可用于WHERE、FROM、SELECT及EXISTS相关判断。
随机文章 随机推荐
评论区
正在加载 GitHub 评论…