Utilisez l'instruction DELETE pour supprimer des lignes d'une table large (LindormTable) ou pour supprimer des séries temporelles entières correspondant aux conditions de filtre TAG d'une table de séries temporelles (LindormTSDB).
Moteurs et versions applicables
|
Moteur |
Version requise |
|
LindormTable |
Toutes les versions |
|
LindormTSDB |
3.4.19 et ultérieures pour la suppression de timeline |
Pour vérifier ou mettre à jour votre version actuelle, consultez le guide des versions et les instructions de mise à jour des versions mineures :
Syntaxe
delete_statement ::= DELETE FROM table_identifier
WHERE where_clause
where_clause ::= relation ( AND|OR relation )*
relation ::= column_name operator term
| '(' column_name ( ',' column_name )* ')' operator tuple_literal
operator ::= '=' | '<' | '>' | '<=' | '>=' | '!=' | IN | IS NOT? NULL | LIKE
Spécifiez les lignes à supprimer à l'aide de la clause WHERE.
Notes d'utilisation
LindormTable
Fonctionnement de DELETE
Lors de l'exécution d'une instruction DELETE, Lindorm écrit un marqueur de suppression dans les données cibles au lieu de lire les données au préalable. L'opération signale un succès, que la ligne cible existe réellement ou non.
Si vous écrivez des données en utilisant UPSERT avec un horodatage futur comme version des données, une instruction DELETE ultérieure sur ces données ne les supprimera pas physiquement, même si l'instruction réussit. Consultez la section Gestion des données multiversions pour plus de détails.
Comportement selon la version
|
Version |
Suppression par lot |
Exigence de la clause WHERE |
|
Antérieure à 2.7.5 |
Non disponible |
Toutes les colonnes de clé primaire avec des conditions |
|
2.7.5 et ultérieures |
Suppression par lot désactivée (par défaut) |
Toutes les colonnes de clé primaire avec des conditions |
|
2.7.5 et ultérieures |
Suppression par lot activée |
Éventail complet des conditions de filtre, similaire à |
Les versions antérieures à 2.8.2.26 prennent en charge uniquement la suppression de ligne unique. À partir de la version 2.8.2.26, la suppression par lot est disponible mais désactivée par défaut. Pour l'activer, contactez le support technique Lindorm.
Une erreur lors d'une opération DELETE par lot, telle qu'un délai d'expiration, peut entraîner une suppression partielle des données.
LindormTSDB
L'instruction DELETE sur une table de séries temporelles supprime toutes les données de la série temporelle correspondante, et non des points de données individuels.
Contraintes de la clause WHERE pour LindormTSDB :
Les conditions de filtre doivent cibler uniquement les colonnes TAG (type VARCHAR).
Le champ
column_identifierdans l'expressionrelationdoit être une colonne VARCHAR (TAG).L'instruction
DELETEne peut pas cibler des enregistrements de données individuels ; elle supprime toujours la série temporelle complète qui satisfait la condition de filtre TAG.
Exemples
Les exemples suivants utilisent cette table :
-- Create a table named sensor.
CREATE TABLE sensor (
p1 INTEGER NOT NULL,
p2 INTEGER NOT NULL,
c1 VARCHAR,
c2 VARCHAR,
PRIMARY KEY(p1, p2)
);
-- Insert data into the table.
UPSERT INTO sensor(p1, p2, c1, c2) VALUES (1,1,'a','a'),(2,2,'b','b'),(3,3,'c','c');
Supprimer une seule ligne
Spécifiez toutes les colonnes de clé primaire dans la clause WHERE pour supprimer une seule ligne.
DELETE FROM sensor WHERE p1 = 1 AND p2 = 1;
Exécutez SELECT * FROM sensor; pour vérifier le résultat :
+------+------+------+------+
| p1 | p2 | c1 | c2 |
+------+------+------+------+
| 2 | 2 | b | b |
| 3 | 3 | c | c |
+------+------+------+------+
Supprimer plusieurs lignes (suppression par lot)
Pour activer la suppression par lot, consultez la rubrique Comment activer la suppression par lot.
Une fois la suppression par lot activée, utilisez une clause WHERE plus large pour supprimer plusieurs lignes à la fois.
DELETE FROM sensor WHERE c1 > 'b' OR p2 > 1;
Exécutez SELECT * FROM sensor; pour vérifier que les lignes attendues ont été supprimées.