Perché troncare DDL?


15

Ho una domanda per l'intervista, che è stata posta durante la mia intervista. Ho risposto alla domanda, ma l'intervistatore non era così convinto della mia risposta. Quindi, per favore, qualcuno mi corregga con la mia comprensione?

D. Perché Troncare è DDL Dove si elimina DML? Entrambi fanno quasi lo stesso lavoro (rimuovendo le righe)

Ans. Quando stiamo usando Truncate, stiamo disallocando l'intero spazio allocato dai dati senza salvare nello spazio di annullamento-tabella. Ma, nel caso di Elimina, stiamo mettendo tutti i dati in un tablespace e poi stiamo cancellando tutti i dati.

Per favore, se qualcuno conosce la migliore risposta per quanto sopra, si prega di spiegare.


I commenti non sono per una discussione estesa; questa conversazione è stata spostata in chat .
Paul White 9

Risposte:


14

La distinzione tra DML e DDL non è chiara come implicano i loro nomi, quindi a volte le cose diventano un po 'confuse.

Oracle classificaTRUNCATE chiaramente come DDL nella Guida ai concetti, maDELETE come DML.

I punti principali che hanno messo TRUNCATEnel campo DDL su Oracle, a quanto ho capito, sono:

  • TRUNCATEpuò modificare i parametri di archiviazione (il NEXTparametro) e quelli fanno parte della definizione dell'oggetto, ovvero nel campo DDL.
  • TRUNCATEfa un implicito commite non può essere eseguito il rollback (a parte il flashback) - la maggior parte (tutte?) operazioni DDL in Oracle fanno questo, nessun DML lo fa.

Il fatto che TRUNCATEnon esegua i ON DELETEtrigger lo distingue anche dalle normali operazioni DML (ma alcune operazioni DML a percorso diretto saltano anche i trigger, quindi non è un chiaro indicatore).

La stessa documentazione rileva che DELETEgenera UNDO, ma TRUNCATEnon lo fa, quindi la tua affermazione è corretta sotto questo aspetto. (Si noti che ne TRUNCATEgenera alcuni in REDOmodo che il troncamento possa essere riprodotto in caso di ripristino / recupero.) Ma alcuniNOLOGGING operazioni possono anche produrre UNDO ridotto (non sono sicuro di nessuno), quindi questo non è un indicatore chiaro neanche secondo me.

Quindi lo riassumo come segue:

  • truncatenon è "transazionale", nel senso che si impegna e non può essere ripristinato e può modificare gli attributi di archiviazione degli oggetti. Quindi non è un normale DML - Oracle lo classifica come DDL.
  • delete è una normale istruzione DML.

Quando si crea una tabella, è possibile specificare elementi quali lo spazio tabella in cui si trova, la dimensione iniziale, la dimensione dell'estensione successiva, ecc. Questi sono attributi di archiviazione. Sì, fanno parte dei metadati di una tabella (o indice o partizione).
Mat

Si noti che lo standard SQL elenca TRUNCATE nel capitolo "Manipolazione dei dati" insieme a INSERT, DELETE e UPDATE.
a_horse_with_no_name

2

Credo che truncateè simile a drop, alter, createin quanto tutto il lavoro su una tabella cioè sono tutti i comandi di livello tabella. Mentre 'delete' è simile insert, select, updatecome tutti i lavori su un righe cioè sono tutti comandi livello di riga.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.