# DELETE

DELETE FROM [db.]table WHERE expr

DELETE FROM 从表 [db.]table 中删除与表达式 expr 匹配的行。被删除的行会立即标记为已删除,并会自动在所有后续查询中过滤掉。数据的清理会在后台异步进行。

例如,以下查询会删除 hits 表中所有 Title 列包含文本 hello 的行:

DELETE FROM hits WHERE Title LIKE '%hello%';

在 MyScale(和 ClickHouse)中,这个操作被称为轻量级删除。与 ALTER TABLE ... DELETE (opens new window) 语句相比,它的开销要小得多。默认情况下,轻量级删除是异步的。然而,我们已经将 mutations_sync (opens new window) 配置为 1,这意味着客户端将等待一个副本处理该语句。

请注意,由于效率问题,我们已经禁用了对具有向量索引的表的 ALTER TABLE ... DELETE 查询。我们建议在所有表上使用 DELETE FROM,因为它速度更快

# 如何更新数据

在 ClickHouse 中,用户可以使用 ALTER TABLE ... UPDATE (opens new window) 命令来更新数据。然而,在 MyScale 中,不建议使用此命令来进行向量更新。更好的方法是使用删除和插入

例如,以下查询演示了如何更新 test_vector 表中 id 列等于 100 的行。

DELETE FROM test_vector WHERE id = 100;
INSERT INTO test_vector values (100, [-0.045589335, ..., 0.026581138]);

使用 ALTER TABLE ... UPDATE不推荐的。

ALTER TABLE test_vector UPDATE vector = [-0.045589335, ..., 0.026581138] WHERE id = 100;