You need to enable JavaScript to run this app.
导航
更新语句 (UPDATE)
最近更新时间:2025.08.14 10:17:09首次发布时间:2025.05.07 15:04:15
复制全文
我的收藏
有用
有用
无用
无用

您可以使用此基本查询格式更新数据。详情请参考更新操作(UPDATE)

语法

ALTER TABLE [db.]table UPDATE column1 = expr1 [, ...] [IN PARTITION partition_id] WHERE filter_expr;

说明

ALTER TABLE 的前缀使这个语法与其他大多数支持 SQL 的系统不同。它的目的是表明,与 OLTP 数据库中的类似查询不同,这是一个繁重的操作,不是为频繁使用而设计。

参数说明
[IN PARTITION partition_id]:如果表数据量较大,或者表的 part 数量较多,建议添加该条件,分区级别执行 update 操作,更快、更稳定。
使用限制

  1. filter_expr必须是UInt8类型。这个查询将指定列的值更新为行中相应表达式的值,对于这些行,filter_expr取值为非零。使用CAST操作符将数值映射到列的类型上。不支持更新用于计算主键或分区键的列。
  2. 一个查询可以包含几个由逗号分隔的命令。
  3. 此语句的查询处理默认是异步操作。

示例

-- 1. 创建库
CREATE DATABASE IF NOT EXISTS sample_db ON CLUSTER sample_cluster;

-- 2. 创建测试表(集群级)
DROP TABLE IF EXISTS sample_db.sample_table ON CLUSTER sample_cluster;
CREATE TABLE if not exists sample_db.sample_table ON CLUSTER sample_cluster (
    uint8 UInt8,
    bool UInt8  
) ENGINE = MergeTree()
ORDER BY uint8;

-- 3. 插入测试数据
INSERT INTO sample_db.sample_table (uint8, bool) VALUES
(20, 0),
(21, 0),
(22, 0);

-- 4. 验证初始数据
SELECT * FROM sample_db.sample_table ORDER BY uint8;

-- 5. 执行 ALTER UPDATE(将 uint8=21 的行的 bool 字段更新为 1)
ALTER TABLE sample_db.sample_table
UPDATE bool = 1
WHERE uint8 = 21;

-- 5. 验证更新结果
SELECT * FROM sample_db.sample_table ORDER BY uint8;