DELETE
DELETE語(yǔ)法用于按行刪除寬表中的數(shù)據(jù)或刪除時(shí)序表中指定條件下的時(shí)間線(xiàn)。
引擎與版本
DELETE語(yǔ)法適用于寬表引擎和時(shí)序引擎。
時(shí)序引擎3.4.19及以上版本支持刪除時(shí)間線(xiàn)。如何查看或升級(jí)當(dāng)前版本,請(qǐng)參見(jiàn)時(shí)序引擎版本說(shuō)明和升級(jí)小版本。
寬表引擎無(wú)版本限制。
語(yǔ)法
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
使用說(shuō)明
在使用DELETE語(yǔ)句刪除數(shù)據(jù)前,您需要注意以下內(nèi)容。
對(duì)于寬表引擎:
DELETE操作是一項(xiàng)高風(fēng)險(xiǎn)操作,為了確保數(shù)據(jù)安全,Lindorm對(duì)DELETE的語(yǔ)義做了限制。只能使用完整的主鍵來(lái)刪除一行數(shù)據(jù),不支持一次性刪除多行數(shù)據(jù)。
刪除操作并非是先讀取再刪除,而是直接寫(xiě)入刪除標(biāo)記。所以無(wú)論被刪除的行是否存在,刪除都會(huì)成功。
使用UPSERT寫(xiě)入數(shù)據(jù)時(shí)如果通過(guò)HINT將未來(lái)時(shí)間戳作為數(shù)據(jù)的版本 ,那么執(zhí)行DELETE時(shí),即使DELETE語(yǔ)句執(zhí)行成功,未來(lái)時(shí)間戳的數(shù)據(jù)也并不會(huì)被真正刪除。詳細(xì)介紹,請(qǐng)參見(jiàn)多版本數(shù)據(jù)管理。
對(duì)于時(shí)序引擎:
DELETE的WHERE條件中只能指定TAG列的過(guò)濾條件。
DELETE無(wú)法刪除單條具體數(shù)據(jù),只能刪除滿(mǎn)足TAG過(guò)濾條件的時(shí)間序列中的所有數(shù)據(jù)。
刪除條件(where_clause)
寬表引擎和時(shí)序引擎均支持指定刪除條件(where_clause)。
在寬表引擎中,where_clause必須是主鍵列,且過(guò)濾條件必須能夠唯一限定一行數(shù)據(jù)。
在時(shí)序引擎中,where_clause必須是TAG列,刪除操作會(huì)把滿(mǎn)足TAG過(guò)濾條件的時(shí)間線(xiàn)中所有數(shù)據(jù)全部刪除。
關(guān)系表達(dá)式(relation)
使用DELETE語(yǔ)法在時(shí)序表中刪除時(shí)間線(xiàn)時(shí),指定的column_identifier必須是VARCHAR列(標(biāo)簽列)。
示例
DELETE FROM sensor WHERE p1 = 10 AND p2 = 20;