non dovremmo fermarci qui, ci sono molte altre differenze tra DELETE e TRUNCATE. Cerchiamo di discuterli con l'aiuto del grafico di confronto mostrato di seguito.
Grafico comparativo
Base per la Comparsa | ELIMINA | TRONCARE |
---|---|---|
Di base | È possibile specificare la tupla che si desidera eliminare. | Elimina tutte le tuple da una relazione. |
linguaggio | DELETE è un comando di lingua di manipolazione dei dati. | TRUNCATE è un comando di Data Definition Language. |
DOVE | Il comando DELETE può avere una clausola WHERE. | Il comando TRUNCATE non ha una clausola WHERE. |
grilletto | Il comando DELETE attiva il trigger applicato sul tavolo e fa in modo che si attivino. | Il comando TRUNCATE non attiva i trigger da attivare. |
cancellazione | Il comando DELETE elimina le tuple uno alla volta. | TRUNCATE elimina l'intera pagina di dati contenente le tuple. |
Serratura | CANCELLA il comando blocca la riga / tupla prima di cancellarla. | TRUNCATE la pagina dei dati del blocco comandi prima di eliminare i dati della tabella. |
Velocità | Il comando DELETE agisce più lentamente rispetto a TRUNCATE. | TRUNCATE è più veloce rispetto a DELETE. |
Transazione | DELETE registra il log delle transazioni per ogni tupla cancellata. | TRUNCATE registra il log delle transazioni per ciascuna pagina di dati eliminati. |
Ristabilire | Il comando DELETE può essere seguito da COMMIT o ROLLBACK. | Il comando TRUNCATE non può essere ROLLBACK. |
Definizione di DELETE
DELETE è un comando DML ( Data Manipulation Language ). L'attività del comando ELIMINA consiste nell'eliminare o rimuovere le tuple da una tabella o da una relazione. Usando DELETE, siamo in grado di eliminare l'intera tupla, con tutti i suoi valori di attributo da una relazione. DELETE non rimuove il valore di un particolare attributo, di una tupla dalla relazione.
È possibile filtrare le tuple che si desidera eliminare da una tabella, utilizzando la clausola WHERE . Se si specifica la clausola WHERE nell'istruzione DELETE, verranno eliminate solo le tuple che soddisfano la condizione della clausola WHERE. Ma se non si specifica la clausola WHERE nell'istruzione DELETE, per impostazione predefinita elimina o elimina tutte le tuple da una relazione. La clausola WHERE nell'istruzione DELETE può contenere istruzioni SELECT-FROM-WHERE nidificate.
La sintassi del comando DELETE è la seguente:
DELETE FROM nome_tabella DOVE [ conditon ];
Il comando DELETE opera solo su una singola relazione o tabella alla volta. Nel caso in cui si desideri eliminare tuple da relazioni diverse, è necessario inserire un comando DELETE diverso per ciascuna di esse. Ma l'eliminazione di tuple da una relazione può violare l' integrità referenziale del database, che può essere risolta con l'aiuto di trigger. Se il comando DELETE viola l'integrità referenziale, vengono attivati tutti i trigger referenziali (se specificati) che propagano l'azione di eliminazione sulle tuple di diversa relazione che fa riferimento alle tuple eliminate.
Il comando ELIMINA innanzitutto blocca la riga o la tupla da eliminare e quindi elimina la tupla una alla volta . Quindi, richiede più blocchi e risorse che lo rendono più lento . È possibile rendere permanenti le modifiche apportate dall'istruzione DELETE utilizzando COMMIT, oppure è possibile reimpostare il database utilizzando ROLLBACK .
Definizione di TRUNCATE
TRUNCATE è simile al comando DELETE in quanto elimina anche le tuple da una relazione. La differenza è che elimina intere tuple da una relazione. Quando viene eseguito il comando TRUNCATE, vengono eliminati interi dati dalla tabella, ogni tupla e tutti i suoi valori di attributo vengono eliminati dalla tabella. Ma la struttura della tabella esiste ancora nel database. Quindi, puoi nuovamente inserire le tuple nel tavolo. TRUNCATE è un comando di Data Definition Language.
La sintassi del comando TRUNCATE è la seguente:
TRUNCATE TABLE nome_tabella ;
Come DELETE, TRUNCATE non funziona sui dati della tabella riga per riga. Invece, opera sulle pagine di dati che memorizzano i dati della tabella. Ora, quando TRUNCATE cancella le pagine di dati, deve acquisire il blocco sulle pagine di dati anziché le tuple. Quindi, risulta meno requisiti di lock e risorse che rendono TRUNCATE più veloce rispetto a DELETE.
L'esecuzione del comando TRUNCATE non attiva alcun trigger poiché non gestisce i dati riga per riga. TRUNCATE non può essere eseguito nel caso in cui alla tabella venga fatto riferimento da una chiave esterna . Una volta che il comando TRUNCATE elimina i dati della tabella, non può mai essere ripristinato .
Differenze chiave tra DELETE e TRUNCATE in SQL
- La differenza principale tra DELETE e TRUNCATE è che utilizzando DELETE è possibile eliminare tuple specificata da una relazione. Ma l'uso di TRUNCATE cancellerà intere tuple da una relazione.
- DELETE è il comando DML mentre TRUNCATE è il comando DDL.
- DELETE utilizza la clausola WHERE per filtrare il record / tuple che devono essere cancellati. Tuttavia, TRUNCATE non richiede la clausola WHERE in quanto elimina tutte le tuple, quindi non è necessario filtrare le tuple.
- DELETE attiva i trigger referenziali applicati alle tabelle. Ma TRUNCATE non attiva alcun trigger sul tavolo.
- Il comando ELIMINA elimina le tuple una alla volta dalla tabella, nell'ordine, vengono elaborate. Tuttavia, TRUNCATE non opera su tuple uno per uno. Invece, TRUNCATE opera sulla pagina di dati che memorizza i dati della tabella.
- DELETE acquisisce il blocco sulla tupla prima di eliminarlo, mentre TRUNCATE acquisisce il blocco sulla pagina dei dati prima di eliminare la pagina dei dati.
- TRUNCATE è più veloce rispetto al comando DELETE.
- DELETE registra il log delle transazioni per ogni tupla mentre, TRUNCATE registra il log delle transazioni per ciascuna pagina di dati.
- Una volta eliminati i dati utilizzando TRUNCATE, non potrà mai essere ripristinato mentre, è possibile ripristinare i dati che sono stati eliminati utilizzando il comando DELETE.
Conclusione:
Se si desidera personalizzare la cancellazione dei record dalla tabella, è possibile utilizzare il comando DELETE. Se vuoi svuotare la tabella, ovvero non vuoi lasciare alcun dato in una tabella, usa il comando TRUNCATE.