在数据库日常操作中,删除不需要的记录是常见需求,SQL的DELETE语句就是完成这类操作的基础工具。下面先通过一张示意图了解DELETE语句的基本作用范围:

DELETE语句基础语法
DELETE语句最基础的语法结构如下,用于删除表中符合指定条件的记录:
-- 基础语法 DELETE FROM 表名 WHERE 筛选条件;
其中FROM后面跟要操作的表名,WHERE子句用于指定删除的记录需要满足的条件,如果不加WHERE子句,会删除表中的所有记录。
不同场景的删除操作示例
1. 删除单条记录
假设有一张用户表user_info,包含id、username、age字段,现在要删除id为5的用户记录,操作如下:
-- 删除id为5的用户记录 DELETE FROM user_info WHERE id = 5;
2. 按多条件删除记录
如果需要删除年龄小于18岁且用户名为空的用户记录,可以添加多个筛选条件:
-- 删除年龄小于18且用户名为空的用户 DELETE FROM user_info WHERE age < 18 AND username IS NULL;
3. 删除全表记录
如果需要清空表中的所有记录,可以省略WHERE子句,不过这种操作需要谨慎使用:
-- 清空user_info表所有记录 DELETE FROM user_info;
DELETE操作注意事项
- 执行DELETE操作前建议先使用SELECT语句加相同的WHERE条件查询,确认要删除的记录范围,避免误删数据。
- 如果数据库开启了事务,DELETE操作后可以使用ROLLBACK回滚,恢复被删除的数据,提交事务后则无法回滚。
- 如果表存在外键约束,删除主表记录时如果子表有对应关联数据,会触发约束报错,需要先处理子表关联数据。
- 清空全表记录时,如果不需要保留自增ID的计数,也可以使用TRUNCATE语句,它的执行效率比不带WHERE的DELETE更高,但无法回滚。
常见错误排查
如果执行DELETE语句时提示语法错误,首先检查表名、字段名是否拼写正确,其次检查WHERE条件中的运算符是否使用正确,比如判断空值要使用IS NULL而不是= NULL。如果提示权限不足,需要联系数据库管理员授予对应表的DELETE权限。