如何在TDengine中更新单行的部分列而非整行数据?
TDengine 部分列更新操作方法
- 首先确认你使用的 TDengine 版本为 2.2.0.0 及以上,更早版本不支持部分列更新能力。
- 部分列更新需要先将数据库的
update参数设置为2,不同场景配置方式如下:- 新建数据库时直接指定参数:
CREATE DATABASE your_db_name UPDATE 2; - 已创建的数据库可以通过修改命令调整:
ALTER DATABASE your_db_name UPDATE 2;
- 新建数据库时直接指定参数:
补充说明:数据库
update参数的三个取值对应不同的更新能力:0 表示不允许任何更新,1 表示仅允许整行覆盖更新,2 表示支持部分列更新。
具体更新操作
你只需要在写入语句中指定主键时间戳ts + 需要更新的列即可,未指定的列会保留原有值,不会被覆盖。
举个实际场景示例:假设你有一个子表 d1001,包含时间戳主键 ts,以及三个数据列 current、voltage、temperature,现在仅需要更新 ts='2024-01-01 00:00:00' 这一行的 voltage 值为225,其余列保持原有值不变,写入语句如下:
INSERT INTO d1001 (ts, voltage) VALUES ('2024-01-01 00:00:00', 225);
注意事项
- 必须携带主键时间戳
ts用来定位需要更新的目标行。 - 如果指定的时间戳对应的行不存在,该操作会自动插入一条新行,未指定的列会默认填充为空值。
- 超级表场景下不需要传入标签列,更新操作不会修改标签的值。
内容的提问来源于stack exchange,提问作者lsm
相关产品推荐
相关产品推荐

