Dans la leçon précédente, nous avons appris à créer des tables avec CREATE TABLE. Mais dans un vrai travail sur une base de données, il est important non seulement de créer la structure, mais aussi de comprendre comment vider des tables ou les supprimer complètement. Pour cela, SQL fournit les instructions TRUNCATE et DROP TABLE.
Les deux appartiennent au langage de définition de données (DDL), mais elles répondent à des besoins différents. TRUNCATE supprime rapidement toutes les lignes d’une table, tandis que DROP TABLE supprime la table elle-même avec sa structure.
TRUNCATEL’instruction TRUNCATE supprime toutes les lignes d’une table, mais la table elle-même reste en place.
Après l’exécution de TRUNCATE :
DELETE massif.TRUNCATETRUNCATE TABLE table_name;
TRUNCATETRUNCATE TABLE logs;
Après cela, la table logs existera toujours dans la base de données, mais toutes ses lignes seront supprimées.
DROP TABLEL’instruction DROP TABLE supprime complètement une table.
Après l’exécution de DROP TABLE :
DROP TABLEDROP TABLE table_name;
DROP TABLEDROP TABLE old_reports;
Après cela, la table old_reports sera entièrement supprimée de la base de données.
TRUNCATE diffère de DROP TABLEMême si ces deux instructions suppriment des données, la différence entre elles est fondamentale.
TRUNCATE supprime uniquement les lignes.DROP TABLE supprime à la fois les lignes et la table elle-même.TRUNCATE, la table reste disponible et on peut y réinsérer des données.DROP TABLE, la table a disparu, et il faut la recréer avant de pouvoir l’utiliser de nouveau.TRUNCATE convient lorsqu’il faut vider rapidement une table tout en conservant sa structure.DROP TABLE convient lorsque la table n’est plus du tout nécessaire.TRUNCATE diffère de DELETELes débutants comparent souvent TRUNCATE à DELETE, car les deux commandes peuvent supprimer des données d’une table.
Les principales différences sont les suivantes :
DELETE peut être utilisé avec WHERE pour supprimer seulement une partie des lignes ;TRUNCATE supprime toutes les lignes de la table d’un seul coup ;DELETE appartient au DML, tandis que TRUNCATE est généralement classé dans le DDL ;TRUNCATE est souvent plus rapide dans de nombreux SGBD lorsqu’il faut vider entièrement une table ;S’il faut supprimer seulement une partie des données, on utilise généralement DELETE. S’il faut vider rapidement toute la table tout en conservant sa structure, TRUNCATE est souvent plus pratique.
Lors de l’utilisation de TRUNCATE et DROP TABLE, il est important de retenir quelques règles :
DROP TABLE si la structure de la table est encore nécessaire ;DELETE par TRUNCATE si vous devez supprimer seulement une partie des lignes ;TRUNCATE ne peut pas être exécuté si la table est référencée par des clés étrangères ;TRUNCATE et la possibilité d’annuler l’opération dépendent du SGBD utilisé.Une mauvaise utilisation de ces instructions peut entraîner une perte de données ou de structure.
Imaginons que nous ayons une table auxiliaire daily_import dans laquelle des données intermédiaires provenant d’un système externe sont chargées chaque jour.
Si cette table est utilisée régulièrement, mais qu’elle doit être complètement vidée avant chaque nouveau chargement, TRUNCATE convient :
TRUNCATE TABLE daily_import;
Après cela, la structure de la table est conservée et de nouvelles données peuvent y être chargées.
Si la table a été créée uniquement pour une tâche ponctuelle et qu’elle n’est plus nécessaire, on peut la supprimer complètement :
DROP TABLE daily_import;
Dans le premier cas, nous préparons la table existante pour une nouvelle utilisation. Dans le second, nous supprimons complètement un objet devenu inutile de la base de données.
Points clés de cette leçon :
TRUNCATE supprime toutes les lignes d’une table mais conserve sa structure.DROP TABLE supprime à la fois les données et la table elle-même.TRUNCATE et DELETE répondent à des besoins proches, mais fonctionnent différemment.TRUNCATE et DROP TABLE peut légèrement varier selon les SGBD.Dans la prochaine leçon, nous étudierons les tables temporaires et verrons dans quels cas elles sont utiles pour des résultats intermédiaires.