
TRUNCATE, DELETE et DROP semblent proches mais font trois choses très différentes en SQL Oracle : DELETE supprime des lignes (réversible), TRUNCATE vide toute la table (rapide, non réversible), et DROP supprime carrément la table elle-même. Ce guide compare les trois en détail, avec un tableau récapitulatif et des exemples.
🧪 Envie de pratiquer ? Exécutez les exemples de cet article dans notre SQL Playground gratuit — aucun logiciel à installer.
Tableau comparatif
| DELETE | TRUNCATE | DROP | |
|---|---|---|---|
| Type | DML | DDL | DDL |
| Supprime | des lignes (filtrables) | toutes les lignes | la table entière (structure incluse) |
| Clause WHERE | ✅ oui | ❌ non | ❌ non |
| ROLLBACK possible | ✅ oui (avant COMMIT) | ❌ non (COMMIT implicite) | ❌ non (mais FLASHBACK possible) |
| Déclenche les triggers | ✅ oui | ❌ non | ❌ non |
| Vitesse (grosse table) | lente | très rapide | très rapide |
| Réinitialise l’espace | ❌ non | ✅ oui | ✅ oui |
DELETE — supprimer des lignes précises
DELETE FROM commandes WHERE statut = 'annulee';
COMMIT; -- ou ROLLBACK pour annulerC’est une opération transactionnelle : tant que vous n’avez pas validé, vous pouvez annuler. Elle déclenche les triggers et peut être filtrée. En contrepartie, sur des millions de lignes elle est lente (journalisation de chaque ligne). Voir notre tutoriel DELETE en SQL Oracle.
TRUNCATE — vider toute la table, vite
TRUNCATE TABLE logs_temp;TRUNCATE est du DDL : il effectue un COMMIT implicite (pas de ROLLBACK possible), ne déclenche pas les triggers, mais libère l’espace et se moque du nombre de lignes — il est quasi instantané. Idéal pour vider une table de travail. Détails dans TRUNCATE Oracle.
DROP — supprimer la table elle-même
DROP TABLE logs_temp; -- va dans la corbeille
DROP TABLE logs_temp PURGE; -- suppression définitiveDROP supprime la structure et les données. Sans PURGE, la table part dans la corbeille (recyclebin) et peut être restaurée par FLASHBACK DROP. Voir aussi DROP en SQL Oracle.
Lequel choisir ?
- Supprimer certaines lignes, en pouvant annuler → DELETE.
- Vider entièrement une table rapidement → TRUNCATE.
- Se débarrasser de la table → DROP.
Pièges à connaître
- TRUNCATE et DROP sur une table parent référencée échouent (clé étrangère) — voir ORA-02292.
- DELETE ne récupère pas l’espace disque ; TRUNCATE/DROP oui.
- TRUNCATE réinitialise le « high water mark » (bon pour les performances de scan ultérieures).
FAQ
Peut-on annuler un TRUNCATE ?
Non, pas par ROLLBACK (COMMIT implicite). En dernier recours, un FLASHBACK TABLE ou une restauration de sauvegarde peut aider, selon la configuration.
TRUNCATE est-il plus rapide que DELETE sans WHERE ?
Oui, largement : TRUNCATE ne journalise pas ligne par ligne. Pour vider une table entière, préférez toujours TRUNCATE.
DROP supprime-t-il aussi les index et contraintes ?
Oui, DROP TABLE supprime la table avec ses index, contraintes et triggers. Utilisez CASCADE CONSTRAINTS si des clés étrangères externes la référencent.
