MySQL :: MySQL 8.0 Reference Manual :: 13.1.37 TRUNCATE TABLE Statement (Română)

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 un InnoDB masa sau NDB 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 valoareAUTO_INCREMENT este resetată la valoarea sa de pornire. Acest lucru este adevărat chiar și pentru MyISAM și InnoDB, 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 coruptInnoDB 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.

Share

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *