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.,
for Å oppnå høy ytelse, TRUNCATE TABLE
går DML-metode for sletting av data. Dermed er det ikke føre til ON DELETE
utløser til brann, kan det ikke være utført for InnoDB
tabeller med foreldre og barn, foreign key relasjoner, og det kan bli rullet tilbake som en DML-drift. Imidlertid, TRUNCATE TABLE
operasjoner på tabeller som bruker en atomic DDL-støttet lagring motor er enten fullt engasjert eller rullet tilbake hvis serveren stopper i løpet av driften deres. For mer informasjon, se Avsnitt 13.1.,1, «Atomic Data Definisjon Uttalelse Støtte».
Selv om TRUNCATE TABLE
er lik DELETE
, det er klassifisert som en DDL uttalelse snarere enn en DML-erklæringen. Den skiller seg fra DELETE
på følgende måter:
-
Avkorte operasjoner slippe og re-opprette en tabell, som er mye raskere enn å slette rader, én etter én, spesielt for store tabeller.
-
Avkorte operasjoner føre til en implisitt forplikte seg, og kan derfor ikke bli rullet tilbake. Se Avsnitt 13.3.,3, «Uttalelser Som kan Føre til en Implisitt Begått».
-
Trunkering operasjoner kan ikke utføres hvis økten har en aktiv tabell lås.
-
TRUNCATE TABLE
mislykkes for enInnoDB
tabell ellerNDB
bordet hvis det er noenFOREIGN KEY
begrensninger fra andre tabeller som refererer til tabellen. Utenlandske viktige begrensninger mellom kolonnene i samme tabell er tillatt. -
Trunkering operasjoner ikke returnere en meningsfull verdi for antall slettet rader., Den vanlige resultatet er «0 rader berørt», som må tolkes som «ingen informasjon.»
-
Så lenge tabell definisjon er gyldig, kan bordet, som kan være re-opprettet som en tom tabell med
TRUNCATE TABLE
, selv om data eller index-filer som har blitt skadet. -
Alle
AUTO_INCREMENT
verdi tilbake til sin start-verdien. Dette gjelder selv forMyISAM
ogInnoDB
, som normalt ikke gjenbruk sekvens verdier., -
Når den brukes med partisjonert tabeller,
TRUNCATE TABLE
bevarer partisjonering, det er, data og index-filer er falt og re-laget, mens partisjon definisjoner er upåvirket. -
TRUNCATE TABLE
uttalelsen ikke påberopeON DELETE
utløser. -
Truncating en skadet
InnoDB
tabell støttes.
TRUNCATE TABLE
for en tabell lukker alle behandlere for tabellen som ble åpnet med HANDLER OPEN
.,
TRUNCATE TABLE
er behandlet for formål av binære logging og replikering som DROP TABLE
etterfulgt av CREATE TABLE
—det er, som DDL snarere enn DML. Dette er på grunn av det faktum at, når du bruker InnoDB
og andre transaksjonsbaserte lagring motorer hvor transaksjonen isolert nivå ikke tillater uttalelse-basert logging (READ COMMITTED
eller READ UNCOMMITTED
), den uttalelsen var ikke logget inn og kopiert når du bruker STATEMENT
eller MIXED
logging-modus., (Bug #36763) det er Imidlertid fortsatt brukes på kopier ved hjelp av InnoDB
på den måten som er beskrevet tidligere.
I MySQL 5.7 og tidligere, på et system med en stor buffer basseng og innodb_adaptive_hash_index
aktivert, en TRUNCATE TABLE
drift kunne føre til en midlertidig nedgang i system ytelse på grunn av en LRU scan som oppstod ved å fjerne tabellen er tilpasningsdyktig hash-indeks oppføringer (Bug #68184). Den remapping av TRUNCATE TABLE
til DROP TABLE
og CREATE TABLE
i MySQL 8.0 unngår problematiske LRU-skanning.,
TRUNCATE TABLE
kan bli brukt med Ytelse Skjema sammendrag tabeller, men effekten er for å tilbakestille oppsummering kolonner til 0 eller NULL
, for ikke å fjerne rader. Se Avsnitt 27.12.18, «Ytelse Skjema Sammendrag Tabeller».
Truncating en InnoDB
bordet som ligger i en fil-per-tabell bordplassen faller den eksisterende bordplassen og oppretter en ny. Så MySQL 8.0.,21, hvis bordplassen ble opprettet med en tidligere versjon og bor i et ukjent katalogen InnoDB
oppretter den nye bordplassen i standard plassering og skriver følgende advarsel til feilloggen: DATA KATALOG må være i en kjent katalogen. DATAENE KATALOG vil bli ignorert, og filen vil bli satt til standard datadir beliggenhet. Kjent kataloger er de som er definert av datadir
, innodb_data_home_dir
, og innodb_directories
variabler., Å ha TRUNCATE TABLE
opprette bordplassen i sin nåværende plassering, legge til katalogen innodb_directories
– innstillingen før du kjører TRUNCATE TABLE
.