Che cosa TRUNCATE
fa di diverso cadere?
Credo che elimina tutti i dati nella tabella ma mantiene il nome della tabella nel database, dove DROP
elimina tutti i dati e la tabella. È corretto ?
Che cosa TRUNCATE
fa di diverso cadere?
Credo che elimina tutti i dati nella tabella ma mantiene il nome della tabella nel database, dove DROP
elimina tutti i dati e la tabella. È corretto ?
Risposte:
ELIMINA - LINGUA DI MANIPOLAZIONE DEI DATI (DML)
L' DELETE
istruzione 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 è:
DELETE
dichiarazione può essere messo a punto utilizzando un predicato via sia WHERE
o JOIN
eliminare alcune o tutte le righe di una tabella.DELETE
dichiarazione verrà registrata dal database e potrà essere ripristinata all'interno di una transazione se la dichiarazione fallisce.DELETE
richiede blocchi a livello di riga sui dati che vengono eliminati, sebbene ciò possa aumentare più in alto se necessario.DELETE
può 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
, ALTER
o DROP
, ma hanno TRUNCATE
uno 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 TRUNCATE
sono:
TRUNCATE
non può essere a grana fine. Se ha esito positivo, rimuoverà tutte le righe dalla tabella.TRUNCATE
in 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.)TRUNCATE
richiede l'esecuzione di un blocco dei metadati della tabella. Il modo in cui questo è effettivamente implementato può essere specifico per RDBMS, ma essenzialmente il TRUNCATE
processo deve impedire ad altri processi di confondersi con la tabella per eseguire il suo DDL.TRUNCATE
sarà più veloce di a DELETE
, ma meno sicuro.DROP TABLE - LINGUA DI DEFINIZIONE DEI DATI (DDL)
DROP TABLE
va oltre un TRUNCATE
in 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.
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,
DROP TABLE TableName
-> elimina la tabella dal database.
TRUNCATE TABLE TableName
-> elimina i dati della tabella, incondizionatamente ... e reimposta il IDENTITY
valore seed, se la tabella ha un IDENTITY
campo.
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