腾讯云数据仓库 TCHouse-X UPDATE 语句

TCHouse-X的UPDATE语句仅支持修改已定义主键的内表行,主键列不可更改,可通过WHERE、FROM子句及子查询精确控制更新范围,执行大规模更新后需运行COMPUTE STATS优化性能。 核心约束:仅主键内表支持UPDATE,且禁止修改主键列值。 语法与并发:支持多表关联更新,可与其他DML并发,但受影响行数可能存在微小差异。 优化建议:无WHERE条件更新前先用SELECT核对数据,超大规模全表更新建议用。

相关产品
腾讯云数据仓库 TCHouse-X 产品页,含版本规格、价格与购买入口。

UPDATE 语句用于修改 TCHouse-X 表中现有行的列值。

一、核心约束

1. 仅限主键表:目前仅支持对定义了主键(Primary Key)的内表进行 UPDATE 操作。

2. 主键不可更改:SET 子句中不能包含主键列,即不支持直接更新主键的值。

3. 内表限制:仅 TCHouse-X 内表支持此操作。

二、语法

UPDATE [database_name.]table_name SET col = val [, col = val … ] [ FROM joined_table_refs ] [ WHERE where_conditions ]

三、使用说明

·条件过滤:WHERE 子句决定了更新的范围。若省略 WHERE,则表中的所有行都会被更新。

·谓词规则:WHERE 子句支持与 SELECT 语句相同的复杂条件,包括子查询。

·FROM 子句:通过 FROM 进行多表连接(Join),可根据关联表的匹配结果来限制待更新的行。

·并发行为:

·UPDATE 可与其他 DML(INSERT/UPSERT)并发运行。

·由于并发执行时数据状态可能发生变化,最终受影响的行数可能与预期存在微小差异。

·反馈信息:执行成功后,系统会报告受影响的行数(Modified rows)。

·统计信息维护:

·执行大规模更新后,务必运行 COMPUTE STATS。这对于保持执行计划的准确性、优化后续的连接查询性能至关重要。

四、示例

数据准备

— 创建主键表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);INSERT INTO test_nopk VALUES (1,1), (2,2), (3,3), (4,4);

五、常规更新与限制

— 【推荐】基于主键更新特定行UPDATE test_pk SET content = 11 WHERE id = 1;– 【报错】非主键表不支持更新– ERROR: AnalysisException: Currently only support update with primary keyUPDATE test_nopk SET content = 11 WHERE id = 1;– 【报错】禁止修改主键列的值– ERROR: AnalysisException: setting expr can't be primary keyUPDATE test_pk SET id = 100 WHERE id = 1;

六、复杂条件更新

— 使用子查询作为 WHERE 谓词UPDATE test_pk SET content = 34 WHERE id > (SELECT id FROM test_pk WHERE id = 2);– 全表更新(省略 WHERE 子句)UPDATE test_pk SET content = 100;

七、带 FROM 子句的关联更新

通过连接(Join)其他表来确定更新范围:

UPDATE test_pk SET test_pk.content = 33 FROM test_pk JOIN test_nopk ON test_pk.content > test_nopk.contentWHERE test_pk.id > (SELECT id FROM test_pk WHERE id = 2);

八、优化建议

·数据安全:在执行不带 WHERE 条件的 UPDATE 前,建议先用相同的条件执行 SELECT,核对受影响的数据范围。

·性能优化:对于超大规模的全表数据更新,有时重新加载数据(TRUNCATE + INSERT)可能比逐行 UPDATE 更具性能优势。

赞 (0)
上一篇 4天前
下一篇 4天前