Differenza tra DROP e TRUNCATE


Risposte:


22

ELIMINA - LINGUA DI MANIPOLAZIONE DEI DATI (DML)

L' DELETEistruzione in qualsiasi RDBMS è considerata un'istruzione DML . Conosciuto anche come CRUD (Crea, Leggi, Aggiorna, Elimina), questo tipo di istruzione ha lo scopo di manipolare i dati in un database senza influenzare la struttura sottostante degli oggetti. Cosa significa in termini pratici è:

  • Una DELETEdichiarazione può essere messo a punto utilizzando un predicato via sia WHEREo JOINeliminare alcune o tutte le righe di una tabella.
  • Una DELETEdichiarazione verrà registrata dal database e potrà essere ripristinata all'interno di una transazione se la dichiarazione fallisce.
  • In genere a DELETErichiede blocchi a livello di riga sui dati che vengono eliminati, sebbene ciò possa aumentare più in alto se necessario.
  • A causa del sovraccarico transazionale, DELETEpuò essere "lento" (questo è relativo), ma più sicuro perché è a grana fine.

TRUNCATE - LINGUA DI DEFINIZIONE DEI DATI (DDL)

TRUCNATEè considerata un'istruzione DDL , il che significa che è destinata a modificare il modo in cui gli oggetti sono definiti in un database. Di solito, le istruzioni DDL sono CREATE, ALTERo DROP, ma hanno TRUNCATEuno scopo particolare, quello di "reimpostare" una tabella rimuovendo tutte le righe. I metodi di questo differiscono tra i motori RDBMS e consiglierei di esaminare le specifiche di MySQL . Le implicazioni pratiche di a TRUNCATEsono:

  • TRUNCATEnon può essere a grana fine. Se ha esito positivo, rimuoverà tutte le righe dalla tabella.
  • TRUNCATEin genere non è registrato. Questo varia da RDBMS e suggerirei di guardare in modo più specifico a come MySQL lo gestisce. (Suggerimento, varia in base alla versione.)
  • TRUNCATErichiede l'esecuzione di un blocco dei metadati della tabella. Il modo in cui questo è effettivamente implementato può essere specifico per RDBMS, ma essenzialmente il TRUNCATEprocesso deve impedire ad altri processi di confondersi con la tabella per eseguire il suo DDL.
  • Poiché (in genere) non è registrato e non utilizza predicati, a TRUNCATEsarà più veloce di a DELETE, ma meno sicuro.

DROP TABLE - LINGUA DI DEFINIZIONE DEI DATI (DDL)

DROP TABLEva oltre un TRUNCATEin che rimuove completamente la tabella dal database. Ciò include la rimozione di tutti gli oggetti associati, come indici e vincoli. Se si elimina una tabella, non solo rimuoveresti tutti i dati, ma anche la struttura. Questo di solito viene fatto quando una tabella non è più necessaria. La preoccupazione principale è che dal momento che a DROPè DDL, in genere non è possibile annullarlo . Alcuni motori RDBMS ti permetteranno di racchiudere DDL all'interno di una transazione in modo da poterlo ripristinare, ma questa non è considerata la migliore pratica e dovrebbe essere evitata.


1
Vorrei aggiungere che TRUNCATE ripristina il contatore di incremento automatico della tabella.
DanMan,

5

Anche se non posso parlare per MySQL, ecco una tabella rapida che mette a confronto alcuni aspetti di troncamento e eliminazione all'interno di Oracle.

truncate                             |   delete
---------------------------------    |   ---------------------------
DDL   (implicitly commits,           |   DML
    including any pending DML)       |  
Does not generate undo info          |   Generates undo info
    (rollback statements)            |       (rollback statements)
Resets high water mark in table      |   Does not affect full-scan 
    and all indexes, improving       |       performance
    full-scan performance            |      
Does not fire any delete triggers    |   Fires delete triggers
Priv to truncate cannot be granted   |   --
    to truncate another user's       |  
    table; DROP ANY TABLE system     |   
    priv required                    |      
Storage for table and indexes can    |   Never shrinks the size of a 
    be set to initial size           |       table or indexes
Cannot truncate parent table from    |   --
    an established referential       |  
    integrity constraint; must       |  
    first disable foreign key        |  
    that references the parent       |  
    table                            |  

Informazioni raccolte da questo libro: http://amzn.com/0470395125

Spero che questo possa aiutare tutti gli utenti Oracle che si imbattono in questa pagina, come ho fatto io. Non esitare a sottolineare quali, se presenti, questi punti sono validi in MySQL,


2

DROP TABLE TableName -> elimina la tabella dal database.

TRUNCATE TABLE TableName-> elimina i dati della tabella, incondizionatamente ... e reimposta il IDENTITYvalore seed, se la tabella ha un IDENTITYcampo.


1
  • DELETE: Comando DML, se si esegue il comando di eliminazione, rimuovere i soli DATI senza disattivare la struttura della tabella, è possibile eseguire il ROLLBACK dei dati riga per riga

  • TRUNCATE: Comando DDL, se si esegue il comando Truncate, rimuovere i soli DATI senza disattivare la struttura della tabella. Non è possibile eseguire il rollback dei dati troncati, rimuovere i dati in modo PAGINA PER PAGINA il troncamento è più veloce quindi eliminare la query

  • DROP:, Comando DDL, se si esegue il comando DROP, elimina (rimuove) i dati e la struttura della tabella totale, inoltre non è possibile ripristinare i dati

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.