DELETE 语句

最近更新时间:2026-05-06 16:28:12

我的收藏
DELETE 语句用于从 TCHouse-X 表中删除满足指定条件的行。
注意:
仅限主键表:TCHouse-X 目前仅支持对定义了主键(Primary Key)的内表进行 DELETE 操作。非主键表不支持此操作。

语法

DELETE [FROM] [database_name.]table_name [ WHERE where_conditions ]
如果提供 WHERE 子句,则删除匹配条件的行。
如果省略 WHERE 子句,则删除表中的所有行(清空表内容)。

使用说明

谓词限制WHERE 子句中的条件仅在目标表为主键表时有效。
条件灵活性WHERE 子句右侧的表达式规则与 SELECT 语句相同,支持子查询。
结果反馈:执行完成后,系统会在消息栏中报告受影响(被删除)的行数。
统计信息更新
在执行大规模 DELETE 操作后,建议执行 COMPUTE STATS 语句。
原因:保持统计信息最新对优化器生成高效的连接(Join)查询执行计划至关重要,特别是对于大表。

示例

准备测试表

-- 创建主键表并插入数据
CREATE TABLE test_pk (id int PRIMARY KEY, content int);
INSERT INTO test_pk VALUES (1,1), (2,2), (3,3), (4,4);

-- 创建非主键表
CREATE TABLE test_nopk (id int, content int);

基于条件删除

-- 删除指定 ID 的行
DELETE FROM test_pk WHERE id = 1;

-- 使用子查询删除:删除 ID 大于“ID为2的行”的所有行
DELETE FROM test_pk WHERE id > (SELECT id FROM test_pk WHERE id = 2);

-- 基于非主键字段条件删除
DELETE FROM test_pk WHERE content = 2;

清空表数据

-- 删除主键表中的所有行
DELETE FROM test_pk;

错误示例

-- 尝试删除非主键表数据(将触发报错)
DELETE FROM test_nopk;
-- 报错信息: ERROR: AnalysisException: Tci NOT SUPPORT: Currently only support delete with primary key

注意事项

内表限制:仅 TCHouse-X 内表支持 DELETE 操作,外表(如 Hive 映射表)不支持。
性能建议:若需清空整个大表,使用 TRUNCATE TABLE 通常比不带条件的 DELETE 更快。