DELETE

从指定表中删除一行或多行数据。支持通过 WHERE 子句精确筛选目标行,也支持子查询作为删除条件。

语法

DELETE FROM table_name [WHERE condition]

参数说明

参数类型是否必填说明
table_name
table_name
标识符必填要删除数据的目标表名,可带 schema 前缀,如
schema_name.table_name
schema_name.table_name
WHERE condition
WHERE condition
表达式可选筛选条件,支持比较运算符、逻辑运算符、子查询等。省略时删除表中全部行

使用示例

示例 1:按条件删除行

删除

doc_test.products
doc_test.products
表中
category
category
'Furniture'
'Furniture'
的所有产品:

DELETE FROM doc_test.products WHERE category = 'Furniture';

执行后查询验证:

SELECT * FROM doc_test.products;

product_id | name | price | stock | category -----------+--------+---------+-------+------------ 1 | Laptop | 5999.00 | 50 | Electronics 2 | Phone | 2999.00 | 120 | Electronics 5 | Tablet | 3499.00 | 60 | Electronics

原有 2 条 Furniture 记录(Desk、Chair)已被删除,剩余 3 条 Electronics 记录。

示例 2:使用子查询作为删除条件

删除

doc_test.employees
doc_test.employees
表中所有
is_active = false
is_active = false
的员工:

DELETE FROM doc_test.employees WHERE id IN ( SELECT id FROM doc_test.employees WHERE is_active = false );

执行后查询验证:

SELECT * FROM doc_test.employees;

id | name | dept | salary | hire_date | is_active ---+---------+-------------+----------+------------+---------- 1 | Alice | Engineering | 12000.00 | 2021-03-15 | true 2 | Bob | Marketing | 8500.00 | 2020-07-01 | true 3 | Charlie | Engineering | 11000.00 | 2022-01-10 | true 5 | Eve | Marketing | 9000.00 | 2023-05-08 | true

is_active = false
is_active = false
的员工 Diana(id=4)已被删除。

示例 3:删除表中全部行

省略 WHERE 子句会删除表中所有行,效果等同于清空表。实际执行时建议使用

WHERE 1=1
WHERE 1=1
明确表达意图(部分客户端工具会对无 WHERE 的 DELETE 发出警告或拒绝执行):

DELETE FROM doc_test.products WHERE 1=1;

执行后查询验证:

SELECT COUNT(*) AS row_count FROM doc_test.products;

row_count --------- 0

表中所有行已被删除,表结构保留。

DELETE 与 TRUNCATE 的区别

对比项DELETETRUNCATE
语法
DELETE FROM table [WHERE ...]
DELETE FROM table [WHERE ...]
TRUNCATE TABLE table
TRUNCATE TABLE table
是否支持 WHERE 条件支持,可精确筛选不支持,始终清空全表
操作粒度逐行删除整表清空
典型场景按条件删除部分行快速清空整张表

如果目的是清空整张表,优先使用

TRUNCATE TABLE
TRUNCATE TABLE
,语义更明确。

注意事项

  • WHERE 子句非必填,但省略会删除表中全部行,执行前务必确认条件正确。
  • DELETE 操作不可逆,建议在执行前先用
    SELECT
    SELECT
    语句验证 WHERE 条件筛选出的行是否符合预期。
  • 执行 DELETE 需要对目标表拥有 DELETE 权限
  • 支持子查询作为 WHERE 条件,子查询可引用其他表。
  • 部分客户端工具(如 cz-cli)对无 WHERE 的 DELETE 有安全拦截,需使用
    WHERE 1=1
    WHERE 1=1
    或相应参数绕过。

相关指南

联系我们
预约咨询
微信咨询
电话咨询