DELETE
本文介绍删除时空数据表中的时空数据语法。
语法
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列(标签列)。
示例
删除时空数据表dt
中id=1
的时空数据。
DELETE from dt WHERE id=1;