Commandes SQL: différence entre DELETE, TRUNCATE et DROP

Commande DELETE

La commande delete en SQL est utilisée pour supprimer des lignes dans une table. Une clause WHERE peut être utilisée pour supprimer seulement quelques lignes matchant une clause spécifique. Si le where n’est pas specifié, toutes les lignes seront supprimées.

Notez un delete, il est toujours possible d’opérer un ROLLBACK tant qu’aucun commit définitif n’a été lancé.

Truncate remet à zero votre compteur si vous avez une clé primaire en auto-increment

Exemple de commande:

SQL> SELECT COUNT(*) FROM emp;

  COUNT(*)
----------
        14

SQL> DELETE FROM emp WHERE job = 'CLERK';

4 rows deleted.

SQL> COMMIT;

Commit complete.

SQL> SELECT COUNT(*) FROM emp;

  COUNT(*)
----------
        10

Commande TRUNCATE

Trcuncate est utilisée pour supprimer toutes les lignes d’une table. Aucun ROLLBACK n’est possible. Aucune clause where ne peut être ajoutée.
La commande truncate est beaucoup plus rapide que la commande delete

SQL> TRUNCATE TABLE emp;

Table truncated.

SQL> SELECT COUNT(*) FROM emp;

  COUNT(*)
----------
         0

Commande DROP

Drop supprime la table ainsi que toutes les lignes de la base de données. tous les index, les privilèges et les triggers seront également supprimés. Aucun ROLLBACK n’est possible.

SQL> DROP TABLE emp;

Table dropped.

SQL> SELECT * FROM emp;
SELECT * FROM emp
              *
ERROR at line 1:
ORA-00942: table or view does not exist

REMARQUES

1- Drop et truncate sont appelées des commandes DDL (Data Definition Langage), alors que delete est une commande DML (Data Manipulation Langage) (voir la différence entre une commande DDL et DML). Seulement la suppression via un delete peut être inversée, les autres commandes sont définitives.
2- si vous souhaitez effacer rapidement TOUT le contenu d’une table et si vous n’avez pas de clés étrangères, alors TRUNCATE est la commande qu’il vous faut dans la mesure où elle sera beaucoup plus rapide qu’un DELETE
3- si vous avez une clé primaire au sein de votre table, TRUNCATE va remettre à zero le compteur, tandis qu’un DELETE gardera toujours le compteur en cours.