Migliore risposta
Prima di tutto “NON È POSSIBILE TRONCARE UN CAMPO”.
Truncate è un concetto nel database che non è come una dichiarazione di cancellazione o un aggiornamento. Il concetto principale di Truncate è come vengono gestiti i metadati dietro le quinte. Se stai lavorando con Oracle puoi studiare un concetto chiamato “High Water Mark” . Puoi trovarlo in dettaglio nel blog di Burleson qui.
In Sql server se pensi a una chiave primaria con valore di incremento automatico, truncate impostalo tutto alla base. Intendo il valore iniziale definito da te o predefinito 1. Quindi, in pratica le operazioni che fa nel back-end sono più specifiche per i metadati e più specifiche per la proprietà a livello di tabella di un database.
Ora, se volevi dire che vuoi pulire una colonna puoi semplicemente lanciare un aggiornamento con NULL per quella particolare colonna o puoi aggiornare con “”.
Update TABLE
Set Column = NULL/’’
Where 1 =1
Ho menzionato questultimo dove perché ormai da molti giorni molti database non consentono di aggiornare lintera colonna senza una clausola where. In mySql si chiamava “Flag di aggiornamento sicuro” . Ma per essere più precisi aggiorna sempre con NULL invece di “” per seguire una buona pratica
Risposta
DELETE è unoperazione registrata su una riga. Ciò significa che leliminazione di ogni riga viene registrata e rimossa fisicamente. Puoi eliminare qualsiasi riga che non comporti una violazione della restrizione, lasciando la chiave esterna o qualsiasi altra restrizione in vigore.
TRUNCATE è unoperazione registrata, ma in modo diverso. TRUNCATE registra la posizione dellaffare delle pagine di informazioni in cui esistono informazioni. La deallocazione delle pagine di informazioni significa che le tue righe di informazioni esistono ancora nelle pagine di informazioni, ma le estensioni sono contrassegnate come vuote per il riutilizzo. Questo è ciò che rende TRUNCATE unoperazione più veloce da eseguire su DELETE. Impossibile troncare una tabella con vincoli di chiave esterna. È necessario rimuovere i vincoli, troncare la tabella e riapplicare i vincoli.
TRUNCATE reimposterà tutte le colonne di identità sullinizializzazione del valore predefinito. Ciò significa che se hai una tabella con una colonna Identity e ha 264 righe con un valore iniziale di 1, il suo ultimo record avrà il valore 264 (supponendo che tu abbia iniziato con il valore 1) nelle colonne della tua identità. Dopo aver troncato la tabella quando si inserisce un nuovo record nella tabella vuota, la colonna identità avrà un valore di 1. DELETE non ha vinto. Nello stesso scenario, se la riga corrente, inserendo una nuova riga nella tabella vuota , la colonna Identity ha un valore di 265.
Perché Truncate è più veloce di Delete?
Motivo: In la scrittura per eliminare tutte le informazioni viene copiata nello spazio tabella di rollback e quindi viene eseguita loperazione di eliminazione. Pertanto, quando si digita ROLLBACK dopo aver eliminato una tabella, è possibile recuperare le informazioni (il metodo le ottiene per il ritmo delle tabelle di rollback). La tecnica richiederà tempo, ma quando si utilizza TRUNCATE, rimuove le informazioni direttamente senza copiarle nello spazio tabella di rollback. Quindi TRUNCATE è più veloce. Due volte troncato non è possibile recuperare le informazioni.