![](http://gadget-info.com/img/difference-between/704/difference-between-delete.jpg)
nu trebuie să ne oprim aici, există multe alte diferențe între DELETE și TRUNCATE. Să le discutăm cu ajutorul graficului de comparație prezentat mai jos.
Diagramă de comparație
Bazele comparării | ȘTERGE | TRUNCHIA |
---|---|---|
De bază | Puteți specifica mufa pe care doriți să o ștergeți. | Sterge toate tuplurile dintr-o relatie. |
Limba | DELETE este o comandă Language Manipulation Language. | TRUNCATE este o comandă de limbă pentru definirea datelor. |
UNDE | Comanda DELETE poate avea clauza WHERE. | Comanda TRUNCATE nu are clauză WHERE. |
trăgaci | Comanda DELETE activează declanșatorul aplicat pe masă și determină declanșarea acestora. | Comanda TRUNCATE nu activează declanșatoarele de foc. |
ștergere | Comanda DELETE elimină câte unul câte unul. | TRUNCATE șterge întreaga pagină de date care conține tuplurile. |
Blocare | Comanda DELETE blochează rândul / tupla înainte de al șterge. | TRUNCATE comanda blochează pagina de date înainte de a șterge datele din tabel. |
Viteză | Comanda DELETE acționează mai încet în comparație cu TRUNCATE. | TRUNCATE este mai rapidă în comparație cu DELETE. |
Tranzacţie | DELETE înregistrează jurnalul de tranzacții pentru fiecare tuplă șterse. | TRUNCATE înregistrare tranzacție jurnal pentru fiecare pagină de date șterse. |
Restabili | Comanda DELETE poate fi urmată fie de COMMIT, fie de ROLLBACK. | Comanda TRUNCATE nu poate fi ROLLBACK. |
Definiția DELETE
DELETE este o comandă a limbii de manipulare a datelor (DML). Sarcina comenzii DELETE este ștergerea sau eliminarea tuplilor dintr-o masă sau o relație. Folosind DELETE, putem elimina intreaga tupla, cu toate valorile atributelor ei dintr-o relatie. DELETE nu elimină valoarea unui anumit atribut, a unei tuple din relație.
Puteți filtra tuplurile pe care doriți să le ștergeți dintr-o masă, utilizând clauza WHERE . Dacă specificați clauza WHERE în instrucțiunea DELETE, atunci ea va șterge numai tuplurile care îndeplinesc condiția clauzei WHERE. Dar dacă nu specificați clauza WHERE în instruciunea DELETE, atunci în mod implicit ea șterge sau elimină toate tuplurile dintr-o relație. Clauza WHERE din instruciunea DELETE poate conține instrucțiuni SELECT-FROM-WHERE imbricate.
Sintaxa comenzii DELETE este după cum urmează:
DELETE FROM nume_tabă WHERE [ conditon ];
Comanda DELETE funcționează numai pe o singură relație sau masă la un moment dat. În cazul în care doriți să ștergeți tuple din relații diferite, trebuie să plasați comanda DELETE diferită pentru fiecare. Dar ștergerea tuplei dintr-o relație poate încălca integritatea referențială a bazei de date, care poate fi rezolvată cu ajutorul unor declanșatoare. Dacă comanda DELETE încalcă integritatea referențială, atunci toți declanșatorii referențiali (dacă este specificat) devin activi care propagă acțiunea de ștergere a tuplilor cu relații diferite care se referă la nivelele șterse.
Ștergerea comenzii mai întâi blochează rândul sau tupla care trebuie șterse și apoi ștergeți tuplul unul câte unul . Prin urmare, este nevoie de mai multe încuietori și resurse care o fac mai lent . Puteți efectua modificările efectuate prin instrucțiunea DELETE permanent folosind COMMIT sau puteți reseta baza de date utilizând ROLLBACK .
Definiția TRUNCATE
TRUNCATE este similar cu comanda DELETE, deoarece șterge și tuplurile dintr-o relație. Diferența constă în faptul că șterge întreruperile întregi dintr-o relație. Pe măsură ce se execută comanda TRUNCATE, se șterg datele întregi din tabel, fiecare tuplă împreună cu toate valorile atributului sunt eliminate din tabel. Dar structura tabelului există în continuare în baza de date. Deci, poți să intri din nou la tuple în masă. TRUNCATE este o comandă de limbă pentru definirea datelor.
Sintaxa comenzii TRUNCATE este după cum urmează:
TRUNCATE TABLE nume_tabel ;
Ca și DELETE, TRUNCATE nu funcționează pe datele din tabelă rând-rând. În schimb, funcționează pe paginile de date care stochează datele din tabel. Acum, atunci când TRUNCATE șterge paginile de date, trebuie să achiziționeze blocarea pe paginile de date în loc de tupluri. Prin urmare, aceasta conduce la o mai mică cerință a blocărilor și a resurselor, ceea ce face TRUNCATE mai rapid comparativ cu DELETE.
Executarea comenzii TRUNCATE nu activează niciun declanșator, deoarece nu operează datele rând după rând. TRUNCATE nu poate fi executată în cazul în care tabelul este referit de o cheie străină . Odată ce comanda TRUNCATE șterge datele tabelului, nu poate fi recuperată înapoi.
Diferențe cheie între DELETE și TRUNCATE în SQL
- Principala diferență dintre DELETE și TRUNCATE este aceea că, folosind DELETE, puteți șterge tupla specificată dintr-o relație. Dar folosirea TRUNCATE va șterge întreruperile dintr-o relație.
- DELETE este comanda DML, în timp ce TRUNCATE este comanda DDL.
- DELETE utilizează clauza WHERE pentru a filtra înregistrările / tuplurile care urmează să fie șterse. Cu toate acestea, TRUNCATE nu are nevoie de clauza WHERE, deoarece șterge toate tuplurile, deci nu este nevoie să filtrați tuplurile.
- DELETE activează declanșatorii referențiali aplicați tabelelor. Dar TRUNCATE nu declanșează niciun declanșator pe masă.
- Comanda DELETE elimină câte unul din tabele din tabel, în ordine, ele sunt procesate. Cu toate acestea, TRUNCATE nu funcționează pe tuple unul câte unul. În schimb, TRUNCATE funcționează pe pagina de date care stochează datele din tabel.
- DELETE dobândește blocarea pe picior înainte de ao șterge, în timp ce TRUNCATE dobândește blocarea pe pagina de date înainte de a șterge pagina de date.
- TRUNCATE este mai rapid decât comanda DELETE.
- DELETE jurnalul de tranzacții de înregistrare pentru fiecare tuplă, în timp ce înregistrați tranzacția TRUNCATE pentru fiecare pagină de date.
- Odată ce ștergeți datele utilizând TRUNCATE, aceasta nu poate fi recuperată înapoi, în timp ce vă puteți recupera datele înapoi pe care le-ați șters folosind comanda DELETE.
Concluzie:
Dacă doriți să personalizați ștergerea înregistrărilor din tabel, puteți utiliza comanda DELETE. Dacă doriți să goliți tabelul, adică nu doriți să lăsați orice date într-o tabelă, atunci utilizați comanda TRUNCATE.