DELETE语法用于按行删除宽表中的数据或删除时序表中指定条件下的时间线。

引擎与版本

  • DELETE语法适用于宽表引擎和时序引擎。

  • 时序引擎3.4.19及以上版本支持删除时间线。如何查看或升级当前版本,请参见时序引擎版本说明升级小版本

  • 宽表引擎无版本限制。

语法

delete_statement ::=  DELETE FROM table_identifier
                      WHERE where_clause
where_clause     ::=  relation ( ( AND | OR ) relation )*
relation         ::=  ( column_identifier ) operator term
operator         ::=  '=' | '!=' | IN | CONTAINS | CONTAINS KEY

使用说明

重要

在使用DELETE语句删除数据前,您需要注意以下内容。

对于宽表引擎:

  • DELETE操作是一项高风险操作,为了确保数据安全,Lindorm对DELETE的语义做了限制。只能使用完整的主键来删除一行数据,不支持一次性删除多行数据。

  • 删除操作并非是先读取再删除,而是直接写入删除标记。所以无论被删除的行是否存在,删除都会成功。

  • 使用UPSERT写入数据时如果通过HINT将未来时间戳作为数据的版本 ,那么执行DELETE时,即使DELETE语句执行成功,未来时间戳的数据也并不会被真正删除。详细介绍,请参见多版本数据管理

对于时序引擎:

  • DELETE的WHERE条件中只能指定TAG列的过滤条件。

  • DELETE无法删除单条具体数据,只能删除满足TAG过滤条件的时间序列中的所有数据。

删除条件(where_clause)

宽表引擎和时序引擎均支持指定删除条件(where_clause)。

  • 在宽表引擎中,where_clause必须是主键列,且过滤条件必须能够唯一限定一行数据。

  • 在时序引擎中,where_clause必须是TAG列,删除操作会把满足TAG过滤条件的时间线中所有数据全部删除。

关系表达式(relation)

使用DELETE语法在时序表中删除时间线时,指定的column_identifier必须是VARCHAR列(标签列)。

示例

DELETE FROM sensor WHERE p1 = 10 AND p2 = 20;