13.1.37 TRUNCATE TABLE Statement
TRUNCATE tbl_name
TRUNCATE TABLE
empties a table completely. It requires the DROP
privilege. Logically, TRUNCATE TABLE
is similar to a DELETE
statement that deletes all rows, or a sequence of DROP TABLE
and CREATE TABLE
statements., pentru a obține performanțe ridicate, TRUNCATE TABLE
ocolește metoda DML de ștergere a datelor. Astfel, ea nu produce ON DELETE
declanșează la foc, acesta nu poate fi efectuat pentru InnoDB
tabele cu părinte-copil cheie externă relații, și nu mai poate fi recuperat ca un DML de funcționare. Cu toate acestea, operațiunile TRUNCATE TABLE
de pe tabelele care utilizează un motor de stocare atomic acceptat de DDL sunt fie complet angajate, fie returnate dacă serverul se oprește în timpul funcționării lor. Pentru mai multe informații, vezi secțiunea 13.1.,1, „Date Atomice Definiție Declarație De Sprijin”.
Desi TRUNCATE TABLE
este similar cu DELETE
, este clasificat ca un DDL declarație mai degrabă decât o instrucțiune DML. Aceasta diferă de la DELETE
în următoarele moduri:
-
Truncate operațiile de scădere și re-crea tabelul, care este mult mai rapid decât ștergerea de rânduri, unul câte unul, în special pentru tabele mari.
-
operațiile de trunchiere provoacă o comitere implicită și astfel nu pot fi derulate înapoi. Vezi Secțiunea 13.3.,3, „declarații care provoacă o comitere implicită”.
-
operațiile de trunchiere nu pot fi efectuate dacă sesiunea deține o blocare activă a tabelului.
-
TRUNCATE TABLE
nu pentru unInnoDB
masa sauNDB
tabel dacă existăFOREIGN KEY
constrângeri din alte tabele care fac referire la masă. Sunt permise constrângeri cheie străine între coloanele din același tabel. operațiile de trunchiere nu returnează o valoare semnificativă pentru numărul de rânduri șterse., Rezultatul obișnuit este „0 rânduri afectate”, care ar trebui interpretat ca „fără informații.” -
atâta timp cât definiția tabelului este validă, tabelul poate fi recreat ca un tabel gol cu
TRUNCATE TABLE
, chiar dacă datele sau fișierele index au devenit corupte. -
orice valoare
AUTO_INCREMENT
este resetată la valoarea sa de pornire. Acest lucru este adevărat chiar și pentruMyISAM
șiInnoDB
, care în mod normal nu reutilizați secvență de valori., -
atunci Când este utilizat cu tabele partiționate,
TRUNCATE TABLE
conserve de separare; aceasta este, de date și fișierele index sunt retrase și re-create, în timp ce partiția definiții nu sunt afectate. -
TRUNCATE TABLE
declarație nu invocăON DELETE
declanșează. -
trunchierea unui corupt
InnoDB
tabel este acceptat.
TRUNCATE TABLE
pentru o masă închide toate stivuitoare pentru table, care au fost deschise cu HANDLER OPEN
.,
TRUNCATE TABLE
este tratată, în scopuri de logare binar și replicarea DROP TABLE
urmat de CREATE TABLE
—care este, ca DDL, mai degrabă decât DML. Acest lucru se datorează faptului că, atunci când se utilizează InnoDB
și alte tranzacționale motoare de stocare în cazul în care nivelul de izolare a tranzacției nu permite declarație pe bază de logare (READ COMMITTED
sau READ UNCOMMITTED
), declarația nu a fost înregistrat și de reprodus atunci când se utilizează STATEMENT
sau MIXED
modul de logare., (Bug #36763) cu toate Acestea, este încă aplicat pe replici folosind InnoDB
în modul descris anterior.
În MySQL 5.7 și mai devreme, pe un sistem cu un tampon mare de piscină și innodb_adaptive_hash_index
activat, un TRUNCATE TABLE
operațiunea ar putea provoca o scădere temporară în sistemul de performanță din cauza unei LRU scanare care a avut loc atunci când a scoate masa de adaptare hash indicele de intrări (Bug #68184). Remapping de TRUNCATE TABLE
și DROP TABLE
și CREATE TABLE
în MySQL 8.0 evită problematică LRU scanare.,
TRUNCATE TABLE
poate fi folosit cu Performanta Schema tabele de sinteză, dar efectul este de a reseta rezumat coloanele de la 0 sau NULL
, nu pentru a elimina rânduri. A Se Vedea Secțiunea 27.12.18, „Tabele De Sinteză A Schemei De Performanță”.
trunchierea unuiInnoDB
tabel care se află într-un fișier-pe-tabel tablespace picături tablespace existente și creează unul nou. Începând cu MySQL 8.0.,21, dacă tabelă a fost creat cu o versiune anterioară și locuiește într-un necunoscut director, InnoDB
creează o nouă tabelă în locația implicită și scrie următorul avertisment pentru jurnalul de eroare: DIRECTORUL De DATE de localizare trebuie să fie într-un director cunoscut. Locația directorului de date va fi ignorată și fișierul va fi pus în locația implicită datadir. Cunoscut directoare sunt cele definite prin datadir
, innodb_data_home_dir
și innodb_directories
variabile., Pentru a avea TRUNCATE TABLE
crearea tablespace în locația actuală, se adaugă în directorul innodb_directories
setare înainte de a rula TRUNCATE TABLE
.