在数据库操作中,除了添加和修改记录外,我们有时还需要删除不需要的记录。例如:

  • 清除不再使用的用户账号;
  • 删除已完成并归档的订单;
  • 移除测试时插入的数据。

这时候就需要用到 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 ...);
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐