Sql:DELETE

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Commande SQL standard
Catégorie DML (Data Manipulation Language)
Rôle Supprimer des lignes existantes dans une table
Voir aussi Sql · Sql:DROP · Sql:UPDATE

DELETE est la commande SQL de suppression de lignes à l'intérieur d'une table. Contrairement à Sql:DROP, qui supprime l'objet table lui-même (structure comprise), DELETE ne touche qu'aux données : la table et sa définition restent en place, seules les lignes correspondant à la clause WHERE disparaissent.

Syntaxe

DELETE FROM nom_table
[WHERE condition];

Sans clause WHERE, la commande supprime toutes les lignes de la table (la table reste vide mais existe toujours) — même précaution que pour Sql:UPDATE : valider la sélection avec un Sql:SELECT utilisant la même condition avant d'exécuter le DELETE.

Exemples

-- Supprimer une ligne précise
DELETE FROM utilisateurs WHERE id = 42;

-- Supprimer selon un filtre texte
DELETE FROM utilisateurs WHERE email LIKE '%@domaine-obsolete.example';

-- Vérifier d'abord la sélection avec un SELECT équivalent
SELECT * FROM utilisateurs WHERE actif = 0 AND derniere_connexion < '2020-01-01';
-- puis, une fois la sélection validée :
DELETE FROM utilisateurs WHERE actif = 0 AND derniere_connexion < '2020-01-01';

-- Suppression bornée dans le temps (purge de lignes obsolètes)
DELETE FROM logs WHERE date_creation < NOW() - INTERVAL 90 DAY;

Pour supprimer toutes les lignes d'une table sans condition, TRUNCATE TABLE (commande DDL) est en général bien plus rapide qu'un DELETE FROM table; sans WHERE — il ne journalise pas ligne par ligne, mais n'est en général pas annulable et ne déclenche pas les triggers DELETE.

Variantes par moteur

  • MySQL/MariaDB : DELETE t1 FROM t1 JOIN t2 ON ... WHERE ..., jointure
 possible directement dans le DELETE.
  • PostgreSQL : DELETE FROM table USING autre_table WHERE ... pour filtrer
 via une autre table.
  • Oracle : pas de LIMIT — pour borner le nombre de lignes supprimées,
 s'appuie sur ROWNUM ou FETCH FIRST n ROWS ONLY dans une
 sous-requête.

Voir aussi

  • Sql — panorama du langage SQL
  • Sql:DROP — supprimer l'objet table (structure comprise)
  • Sql:UPDATE — modifier des lignes sans les supprimer
  • Sql:SELECT — vérifier la sélection avant de supprimer