TDengine 数据更新与删除

发布时间:2026/6/27 3:11:45

TDengine 数据更新与删除 5.写入路径 05 数据删除与更新 — DELETE/UPDATE 语义与故障诊断适用版本TDengine v3.xv3.3.x / v3.4.x |最后更新2026-06-26概述时序场景写多读多、改少删少。TDengine 支持 DELETE、UPDATE、DROP、TRUNCATE但带有必须含时间条件等时序库特有约束。本文说明语义、内部机制Tombstone / 同 ts 覆盖以及删改操作的专属报错与排查。v3 起所有库默认支持部分列更新2.x 的CREATE DATABASE ... UPDATE 0/1/2选项已废除。核心概念概念说明DELETE按时间范围逻辑删除Compaction 后物理清理UPDATE按 ts 更新列未指定列保留原值TombstoneDELETE 产生的删除标记INSERT 同 ts写入路径上的 Upsert见 01 篇KEEP自动过期删除优于手工 DELETETRUNCATE清空库数据保留 Schema详细解析1. DELETE 语法与约束-- 子表时间范围删除DELETEFROMd1001WHEREts2026-06-01ANDts2026-06-02;-- 超级表带 Tag 过滤DELETEFROMmetersWHEREts2026-01-01ANDlocationBeijing;硬约束规则说明必须有 ts 条件无时间范围的 DELETE 被拒绝不支持子查询 / JOIN简化实现、防全表扫误删超级表 DELETE作用于匹配子表集合错误示例 DELETE FROM meters WHERE current 100; → Invalid delete: 缺少明确时间窗口 正确示例 DELETE FROM meters WHERE ts 2026-01-01 AND current 100;2. DELETE 内部机制DELETE 请求 │ ▼ 解析目标表 时间范围 [ts_start, ts_end] │ ▼ 写 Tombstone 记录WAL MemTable 标记 (table_id, ts_start, ts_end) 为已删除 │ ▼ 查询时读数据块 过滤 Tombstone 范围 │ ▼ 后台 Compaction物理移除数据释放空间用户体验DELETE 成功后立即查不到范围内数据磁盘空间不会立即下降需等 Compaction大量 DELETE → Tombstone 增多 → 查询过滤开销上升3. UPDATE 语法UPDATEd1001SETcurrent28.5WHEREts2026-06-01 12:00:00;UPDATEd1001SETcurrent28.5,voltage222WHEREts2026-06-01ANDts2026-06-02;约束规则说明必须有 ts 精确或范围条件同 DELETE不能改 ts 主键PRIMARY KEY 不可 UPDATE不能改 Tag用ALTER TABLE ... SET TAG未指定列v3保留原值部分列更新4. UPDATE vs INSERT 同 ts方式行为适用INSERT ... 同 ts部分列覆盖其余保留流式修正单点UPDATE ... WHERE ts显式 SET 列语义清晰、批量改列DELETE INSERT完全替换行大范围重做两者最终都走写入路径WAL → MemTable不是原地改磁盘文件。5. DROP 与 TRUNCATEDROPTABLEd1001;-- 删子表DROPSTABLE meters;-- 删超级表及全部子表DROPDATABASEtest_db;-- 删库操作Schema数据可恢复DELETE保留逻辑删否无 undoDROP TABLE删除异步清理文件否6. 删改校验链DELETE / UPDATE │ ▼ ① 语法 表存在性同 INSERT │ ▼ ② WHERE 必须含 ts 有效范围 └─ The DELETE statement must only have a definite time window range │ ▼ ③ 权限 WRITE │ ▼ ④ VNodeTombstone 或新行写入 │ ▼ ⑤ 副作用Last 缓存失效、Stream/RSMA 可能重算7. 删改故障诊断表错误消息根因处理The DELETE statement must only have a definite time window rangeWHERE 无 ts 或范围不明确加ts ... AND ts ...UPDATE 无此报错但语义不对WHERE 过宽误改多行先用 SELECT 同条件预览DELETE 成功但空间不减Tombstone 未 Compaction等待或COMPACT长期用 KEEP 代替DELETE 后 Stream 结果异常流任务未忽略删改检查 StreamIGNORE UPDATE/DELETE_MARKPermission denied无 WRITEGRANTTable does not exist表名错SHOW TABLESUPDATE 报 ts 相关错WHERE 未命中任何行非错误affected_rows08. 推荐实践KEEP 代替手工 DELETECREATEDATABASEpower KEEP365;-- 超 365 天自动清理ALTERDATABASEpower KEEP90;-- 缩保留期KEEP 在文件级删除无 Tombstone 堆积远优于周期性DELETE FROM stb WHERE ts ...。代码示例修正错误点-- 单点修正UPDATEd1001SETcurrent25.3WHEREts2026-06-04 12:00:00.123;-- 等价 UpsertINSERTINTOd1001(ts,current)VALUES(2026-06-04 12:00:00.123,25.3);安全删除流程-- 1. 先查后删SELECTCOUNT(*)FROMmetersWHEREts2026-06-04 10:00ANDts2026-06-04 11:00ANDlocationBeijing;-- 2. 确认后再删DELETEFROMmetersWHEREts2026-06-04 10:00ANDts2026-06-04 11:00ANDlocationBeijing;清理测试库DROPDATABASEtest_db;-- 彻底删除性能考量操作即时成本长期影响DELETE 小范围低Tombstone 少量DELETE 大范围中Tombstone 多查询变慢UPDATE 单行低等同一次写入同 ts 多版本UPDATE 大范围中流/预聚合重算反模式反模式问题替代高频 DELETE 少量数据Tombstone 爆炸KEEP / TTL用 UPDATE 做业务主路径写入放大设计为 INSERT-only无 ts 的 DELETE直接拒绝必须加时间窗误删求回滚v3 无事务回滚备份 taosdump 恢复FAQQ1: DELETE 后磁盘何时释放Compaction 物理清理后。可观察ins_disk_usage变化或低峰执行COMPACT。Q2: 同一行 UPDATE 多次可以。每次 UPDATE 写新版本查询取最新。版本过多影响聚合性能。Q3: 误删能否恢复不能自动恢复。依赖备份、副本延迟窗口内人工导出或企业版备份工具。Q4: v3 还需要 CREATE DATABASE UPDATE 2 吗不需要。v3 统一支持部分列 UPDATE该选项已从 CREATE DATABASE 废除。Q5: DELETE 和 TRUNCATE 选哪个清测试数据、保留表结构 →TRUNCATE DATABASE删单表 →DROP TABLE按条件删部分 →DELETE ts 范围。Q6: 大模型常答 TDengine 不支持 UPDATE错误。v3 支持 UPDATE 和 INSERT Upsert。限制是不能改 ts/Tag且 DELETE 必须带时间窗。参考系统构架篇01-《TDengine 整体架构全景》02-《集群拓扑深度解析》03-《MNode 内部机制深度解析》04-《RPC 通信层深度解析》05-《VNode 生命周期》06-《RAFT 共识协议》07-《端到端的消息流》数据模型01-《数据库创建与参数详解》02-《超级表/子表/普通表》03-《支持数据类型深度解析》04-《TDengine Tag 设计哲学与 Schema 变更机制》05-《TDengine 虚拟表实现原理》存储引擎01-《TDengine 存储引擎概览》02-《TDengine MemTable 深度解析》03-《TDengine WAL 预写日志机制》04-《TDengine 数据文件格式》05-《TDengine Commit 与 Flush 机制 》06-《TDengine Compaction 合并策略 》07-《TDengine 数据保留与 TTL》08-《TDengine 压缩编码机制》09-《TDengine Cache 与 Last 查询加速》10-《TDengine 逻辑计划生成》查询引擎01-《TDengine 查询引擎概览》02-《TDengine SQL 解析与词法分析》03-《TDengine 语义分析与 AST 重写》04-《TDengine 逻辑计划生成》05-《TDengine 物理计划生成》06-《TDengine 扫描算子》07-《TDengine 聚合算子》08-《TDengine 聚合算子》09-《TDengine 连接算子》10-《TDengine 排序、填充与投影》11-《TDengine 分布式查询执行》12-《TDengine EXPLAIN 与查询优化》数据写入01-《TDengine SQL INSERT》02-《TDengine 无模式写入》03-《TDengine STMT 写入》04-《TDengine 写入内部流程》关于 TDengineTDengine 专为物联网IoT平台、工业大数据平台设计。其中TDengine TSDB 是一款高性能、分布式的时序数据库Time Series Database同时它还带有内建的缓存、流式计算、数据订阅等系统功能TDengine IDMP 是一款AI原生工业数据管理平台它通过树状层次结构建立数据目录对数据进行标准化、情景化并通过 AI 提供实时分析、可视化、事件管理与报警等功能。

相关新闻