Leçon 8.3 : L'instruction DELETE
Dans la leçon précédente, nous avons appris à modifier des enregistrements avec UPDATE. Voyons maintenant comment supprimer des lignes inutiles ou obsolètes grâce à l'instruction DELETE. C'est une commande DML importante qu'il faut utiliser avec une attention particulière, car les données supprimées ne peuvent pas toujours être récupérées facilement.
Syntaxe de base
DELETE FROM nom_de_table
WHERE condition;
DELETE FROM nom_de_table— indique la table dont les lignes doivent être supprimées.WHERE condition— détermine quelles lignes seront supprimées.
Si WHERE est omis, toutes les lignes de la table seront supprimées.
Règles importantes
- Vérifiez toujours la clause
WHERE: une erreur dans la condition peut supprimer les mauvaises données ou trop de lignes. - Exécutez d'abord un
SELECT: avant d'utiliserDELETE, il est recommandé d'exécuter unSELECTavec la même condition pour vérifier que le résultat est correct. - La structure de la table reste intacte :
DELETEsupprime uniquement les données, pas la table ni ses colonnes. - Attention aux données liées : si des clés étrangères sont définies, la base peut empêcher la suppression de lignes référencées par d'autres tables.
- Transactions : dans les systèmes en production, il est plus sûr d'exécuter les suppressions importantes à l'intérieur d'une transaction.
Exemples
Exemple 1 : Supprimer une seule ligne
Supprimons un client à l'aide de son identifiant :
DELETE FROM customer
WHERE customer_id = 1;
Remarque : grâce à WHERE customer_id = 1, une seule ligne précise sera supprimée.
Exemple 2 : Supprimer plusieurs lignes selon une condition
Supprimons les paiements effectués avant une certaine date :
DELETE FROM payment
WHERE payment_date < '2005-05-25';
Résultat : toutes les lignes de payment dont la date de paiement est antérieure à la date indiquée seront supprimées.
Exemple 3 : Supprimer avec une sous-requête
Parfois, il faut supprimer des lignes en fonction d'une condition provenant d'une autre table. Par exemple, supprimons les paiements des clients inactifs :
DELETE FROM payment
WHERE customer_id IN (
SELECT customer_id
FROM customer
WHERE active = 0
);
Résultat : tous les paiements des clients marqués comme inactifs seront supprimés.
Exemple 4 : Supprimer toutes les lignes d'une table
Si vous devez vider complètement une table, DELETE peut aussi être utilisé sans WHERE :
DELETE FROM temp_import;
Remarque : la table temp_import existera toujours, mais toutes ses lignes auront été supprimées.
Vérifier avant de supprimer
Une bonne pratique consiste à examiner d'abord les lignes concernées :
-- D'abord vérifier les lignes
SELECT customer_id, first_name, last_name, active
FROM customer
WHERE active = 0;
-- Seulement après vérification, exécuter le DELETE
DELETE FROM customer
WHERE active = 0;
Cette approche aide à éviter la suppression accidentelle de données supplémentaires.
Quand DELETE est particulièrement utile
- nettoyer des données temporaires ou de test ;
- supprimer des enregistrements obsolètes selon une date ;
- supprimer des lignes qui ne respectent plus les règles métier ;
- préparer des tables à un nouveau chargement de données.
Points clés de cette leçon :
DELETEsupprime des lignes existantes d'une table.- Sans
WHERE, toutes les lignes de la table seront supprimées. - Avant de supprimer, il est conseillé d'exécuter un
SELECTavec la même condition. DELETEconserve la structure de la table — seules les données sont supprimées.- Dans les cas importants, il est plus sûr d'utiliser des transactions et de tenir compte des clés étrangères.