J'ai une question d'entrevue, qui a été posée lors de mon entretien. J'ai répondu à la question, mais l'intervieweur n'était pas aussi convaincu de ma réponse. Alors, quelqu'un peut-il me corriger avec ma compréhension?
Q. Pourquoi tronquer est DDL Où supprimer est DML? Les deux font presque le même travail (suppression des lignes)
Rép. Lorsque nous utilisons Truncate, nous désallouons tout l'espace alloué par les données sans enregistrer dans l'espace d'annulation de table. Mais, en cas de suppression, nous mettons toutes les données dans l'espace table d'annulation, puis nous supprimons toutes les données.
S'il vous plaît, si quelqu'un connaît la meilleure réponse pour ce qui précède, veuillez expliquer.
Réponses:
La distinction DML contre DDL n'est pas aussi claire que leur nom l'indique, donc les choses deviennent parfois un peu boueuses.
Oracle est clairement classé
TRUNCATE
comme DDL dans le Guide des concepts, maisDELETE
comme DML.Les principaux points qui ont mis
TRUNCATE
dans le camp DDL sur Oracle, si je comprends bien, sont:TRUNCATE
peut modifier les paramètres de stockage (leNEXT
paramètre), et ceux-ci font partie de la définition de l'objet - c'est dans le camp DDL.TRUNCATE
fait un implicitecommit
et ne peut pas être annulé (flashback de côté) - la plupart (toutes?) des opérations DDL dans Oracle le font, pas DML.Le fait de
TRUNCATE
ne pas exécuter lesON DELETE
déclencheurs le distingue également des opérations DML normales (mais certaines opérations DML à chemin direct ignorent également les déclencheurs, ce n'est donc pas un indicateur clair).Cette même documentation note que
DELETE
génère UNDO, maisTRUNCATE
non, donc votre déclaration est correcte à cet égard. (Notez queTRUNCATE
cela en génèreREDO
pour que la troncature puisse être rejouée en cas de restauration / récupération.) Mais certainesNOLOGGING
opérations peuvent également produire un UNDO réduit (pas sûr du tout), donc ce n'est pas un indicateur clair non plus à mon avis.Je résumerais donc ainsi:
truncate
n'est pas "transactionnel" dans le sens où il est validé et ne peut pas être annulé, et peut modifier les attributs de stockage des objets. Ce n'est donc pas du DML ordinaire - Oracle le classe comme DDL.delete
est une instruction DML ordinaire.la source
Je pense que
truncate
c'est semblable àdrop
,alter
,create
comme ils travaillent tous sur une table -à- dire tous sont des commandes de niveau de table. Alors que la « suppression » est semblable àinsert
,select
,update
comme tous les travaux sur une des lignes -à- dire tous sont des commandes de niveau de ligne.la source