SQL关键字三分钟入门:DELETE —— 删除数据
在数据库操作中,除了添加和修改记录外,我们有时还需要删除不需要的记录。例如:
- 清除不再使用的用户账号;
- 删除已完成并归档的订单;
- 移除测试时插入的数据。
这时候就需要用到 SQL 中非常基础但极其重要的关键字 —— DELETE
!
它是用来从表中删除现有记录的核心命令,掌握它能让你轻松地清理数据库中的数据。
什么是 DELETE?
DELETE
是 SQL 中用于从表中删除记录的关键字语句。通过指定要删除的表以及相应的条件,你可以精确地移除数据库中的特定记录或所有记录。
你可以把它理解为:“我要从这张表里删除符合条件的数据”。
基本语法
DELETE FROM table_name
WHERE condition;
table_name
:你要删除记录的表。WHERE
(可选):限定哪些行将被删除;如果省略了WHERE
子句,则会删除表中的所有记录。
⚠️ 注意:忘记使用
WHERE
条件会导致整个表的所有记录都被删除,请务必小心。
示例讲解
假设我们有一个 users
表,结构如下:
id | name | age | gender | created_at |
---|---|---|---|---|
1 | 张三 | 20 | 男 | 2025-06-20 |
2 | 李四 | 22 | 女 | 2025-06-21 |
3 | 王五 | 21 | 男 | 2025-06-22 |
示例1:删除单个记录
如果你想删除名为“张三”的用户:
sql
深色版本
DELETE FROM users
WHERE name = '张三';
结果:
id | name | age | gender | created_at |
---|---|---|---|---|
2 | 李四 | 22 | 女 | 2025-06-21 |
3 | 王五 | 21 | 男 | 2025-06-22 |
示例2:删除满足复杂条件的记录
如果你想删除年龄大于等于22岁的男性用户:
DELETE FROM users
WHERE age >= 22 AND gender = '男';
结果:
id | name | age | gender | created_at |
---|---|---|---|---|
2 | 李四 | 22 | 女 | 2025-06-21 |
示例3:删除所有记录
如果你想要清空整个表中的数据,可以省略 WHERE
子句。例如,清空 users
表中的所有记录:
DELETE FROM users;
结果:users
表变为空表,无任何记录。
⚠️ 提醒:此操作不可逆,请谨慎使用。
示例4:结合子查询删除
有时候你需要根据另一个表的信息来决定删除哪些记录。比如,从 orders
表中找出所有未支付的订单,并删除对应的客户信息:
DELETE FROM customers
WHERE customer_id IN (SELECT customer_id FROM orders WHERE status = '未支付'
);
这个例子说明了:
- 如何利用子查询的结果作为删除的依据。
- 删除那些在
orders
表中有未支付订单的客户信息。
使用建议
操作技巧 | 使用建议 |
---|---|
备份数据 | 在执行大规模删除之前,建议先备份相关数据,以防误操作 |
使用事务 | 对于关键数据的删除,最好放在事务中执行,以便出现问题时可以回滚 |
避免全表删除 | 如果不需要删除所有记录,请务必加上 WHERE 子句 |
子查询限制 | 当使用子查询作为删除来源时,确保子查询返回唯一结果,否则可能导致异常 |
总结对比表
场景 | SQL 示例 |
---|---|
删除单个记录 | DELETE FROM users WHERE name = '张三'; |
删除满足复杂条件的记录 | DELETE FROM users WHERE age >= 22 AND gender = '男'; |
删除所有记录 | DELETE FROM users; |
结合子查询删除 | DELETE FROM customers WHERE customer_id IN (SELECT ...); |