Pourquoi tronquer DDL?

15

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.

Ravi
la source
Les commentaires ne sont pas pour une discussion approfondie; cette conversation a été déplacée vers le chat .
Paul White 9

Réponses:

14

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é TRUNCATEcomme DDL dans le Guide des concepts, mais DELETEcomme DML.

Les principaux points qui ont mis TRUNCATEdans le camp DDL sur Oracle, si je comprends bien, sont:

  • TRUNCATEpeut modifier les paramètres de stockage (le NEXTparamètre), et ceux-ci font partie de la définition de l'objet - c'est dans le camp DDL.
  • TRUNCATEfait un implicite commitet 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 TRUNCATEne pas exécuter les ON DELETEdé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 DELETEgénère UNDO, mais TRUNCATEnon, donc votre déclaration est correcte à cet égard. (Notez que TRUNCATEcela en génère REDOpour que la troncature puisse être rejouée en cas de restauration / récupération.) Mais certaines NOLOGGINGopé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:

  • truncaten'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.
Tapis
la source
Lorsque vous créez une table, vous pouvez spécifier des éléments tels que l'espace disque logique dans lequel elle se trouve, la taille initiale, la taille de l'étendue suivante, etc. Ce sont des attributs de stockage. Oui, ils font partie des métadonnées d'une table (ou d'un index ou d'une partition).
Mat
Notez que la norme SQL répertorie TRUNCATE dans le chapitre "Manipulation des données" avec INSERT, DELETE et UPDATE.
a_horse_with_no_name
2

Je pense que truncatec'est semblable à drop, alter, createcomme ils travaillent tous sur une table -à- dire tous sont des commandes de niveau de table. Alors que la « suppression » est semblable à insert, select, updatecomme tous les travaux sur une des lignes -à- dire tous sont des commandes de niveau de ligne.

RahulDeep Attri
la source