Skip to content

DELETE – Supprimer des lignes

Bonne lecture et bon apprentissage !
Junior TSAFACK – 08/08/2026
⏱️ Temps de lecture estimé : 5 minutes


La commande DELETE en SQL permet de supprimer des lignes dans une table. En utilisant cette commande associée à WHERE, il est possible de sélectionner les lignes concernées qui seront supprimées.

Attention : Avant d’essayer de supprimer des lignes, il est recommandé d’effectuer une sauvegarde de la base de données, ou tout du moins de la table concernée par la suppression. Ainsi, s’il y a une mauvaise manipulation, il est toujours possible de restaurer les données.


La syntaxe pour supprimer des lignes est la suivante :

DELETE FROM table
WHERE condition;

Attention : S’il n’y a pas de condition WHERE, alors toutes les lignes seront supprimées et la table sera alors vide. Cette opération est généralement irréversible (sauf si vous utilisez des transactions).


Imaginons une table « utilisateur » qui contient des informations sur les utilisateurs d’une application.

Table « utilisateur » :

id nom prenom date_inscription
1 Bazin Daniel 2012-02-13
2 Favre Constantin 2012-04-03
3 Clerc Guillaume 2012-04-12
4 Ricard Rosemonde 2012-06-24
5 Martin Natalie 2012-07-02

Si l’on souhaite supprimer les utilisateurs qui se sont inscrits avant le 10 avril 2012, il faut effectuer la requête suivante :

DELETE FROM utilisateur
WHERE date_inscription < '2012-04-10';

La requête permettra alors de supprimer les utilisateurs Daniel (id 1) et Constantin (id 2). La table contiendra alors les données suivantes :

Résultat :

id nom prenom date_inscription
3 Clerc Guillaume 2012-04-12
4 Ricard Rosemonde 2012-06-24
5 Martin Natalie 2012-07-02

DELETE FROM utilisateur
WHERE id = 3;

Supprimer avec plusieurs conditions (AND / OR)

Section titled “Supprimer avec plusieurs conditions (AND / OR)”
DELETE FROM utilisateur
WHERE date_inscription < '2012-01-01'
OR date_inscription > '2012-12-31';

Supprimer les utilisateurs qui n’ont effectué aucune commande :

DELETE FROM utilisateur
WHERE id NOT IN (
SELECT DISTINCT utilisateur_id FROM commande
);

Remarque : Certains SGBD (comme MySQL) n’autorisent pas la suppression dans la même table que celle utilisée dans une sous-requête. Dans ce cas, on peut contourner en utilisant une table temporaire ou une syntaxe alternative.

MySQL :

DELETE u
FROM utilisateur u
LEFT JOIN commande c ON u.id = c.utilisateur_id
WHERE c.utilisateur_id IS NULL;

PostgreSQL :

DELETE FROM utilisateur
USING commande
WHERE utilisateur.id = commande.utilisateur_id
AND commande.date_achat < '2020-01-01';

Critère DELETE TRUNCATE
Vitesse Plus lent (suppression ligne par ligne) Plus rapide (supprime le tableau de données)
Condition Peut utiliser WHERE Supprime toutes les lignes sans condition
Transaction Peut être annulé (ROLLBACK) Peut être annulé (dans la plupart des SGBD)
Déclencheurs Déclenche les triggers DELETE Ne déclenche pas les triggers
Compteur AUTO_INCREMENT Ne le réinitialise pas Le réinitialise généralement
Verrouillage Verrouille les lignes une par une Verrouille la table entière

1. Toujours utiliser WHERE (sauf cas exceptionnel)

Section titled “1. Toujours utiliser WHERE (sauf cas exceptionnel)”
-- ❌ Dangereux : supprime TOUTES les lignes
DELETE FROM utilisateur;
-- ✅ Sécurisé : ne supprime qu'un utilisateur spécifique
DELETE FROM utilisateur WHERE id = 42;

Avant d’exécuter une requête DELETE, il est prudent de tester la condition avec un SELECT :

-- Vérifier quelles lignes vont être supprimées
SELECT * FROM utilisateur WHERE date_inscription < '2012-04-10';
-- Puis exécuter la suppression
DELETE FROM utilisateur WHERE date_inscription < '2012-04-10';

Pour les opérations critiques, utilisez les transactions pour pouvoir annuler en cas d’erreur :

START TRANSACTION;
DELETE FROM utilisateur WHERE date_inscription < '2012-04-10';
-- Vérifier le résultat
SELECT * FROM utilisateur;
-- Valider si tout est correct
COMMIT;
-- Ou annuler si problème
-- ROLLBACK;

Avant une suppression massive, il est recommandé de faire une sauvegarde :

-- Créer une copie de la table
CREATE TABLE utilisateur_backup AS SELECT * FROM utilisateur;
-- Ou exporter les données avant la suppression

5. Utiliser RETURNING (PostgreSQL) pour voir les suppressions

Section titled “5. Utiliser RETURNING (PostgreSQL) pour voir les suppressions”
DELETE FROM utilisateur
WHERE date_inscription < '2012-04-10'
RETURNING *;

Erreur Cause Solution
Oubli de WHERE Toutes les lignes sont supprimées Toujours spécifier WHERE sauf exception
Violation de contrainte de clé étrangère La ligne est référencée dans une autre table Supprimer d’abord les références ou utiliser ON DELETE CASCADE
Erreur de syntaxe Oubli de FROM ou WHERE Vérifier la syntaxe de la requête

Vous savez désormais comment supprimer des lignes avec DELETE. Mais que faire si vous souhaitez vider complètement une table tout en conservant sa structure ?

👉 Chapitre 24 : MERGE (UPSERT) – INSERT ou UPDATE (Standard SQL)


Bonne continuation !
Junior TSAFACK – 08/08/2026