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.,
för att uppnå hög prestanda kringgårTRUNCATE TABLE
DML-metoden för att radera data. Således orsakar det inteON DELETE
utlöser Brand, det kan inte utföras förInnoDB
tabeller med överordnade barn främmande nyckelrelationer, och det kan inte rullas tillbaka som en DML-operation. MenTRUNCATE TABLE
operationer på tabeller som använder en atomic DDL-stödd lagringsmotor är antingen helt engagerade eller rullade tillbaka om servern stannar under driften. För mer information, se avsnitt 13.1.,1, ”Atom Data Definition Uttalande Stöd”.
även om TRUNCATE TABLE
liknar DELETE
klassificeras det som ett DDL-uttalande snarare än ett DML-uttalande. Det skiljer sig från DELETE
på följande sätt:
-
Trunkera operationer släpp och återskapa tabellen, vilket är mycket snabbare än att ta bort rader en efter en, särskilt för stora tabeller.
-
Trunkera operationer orsakar en implicit begå, och så kan inte rullas tillbaka. Se Avsnitt 13.3.,3, ”uttalanden som orsakar en Implicit begå”.
-
trunkering kan inte utföras om sessionen har ett aktivt tabelllås.
-
TRUNCATE TABLE
misslyckas för enInnoDB
tabell ellerNDB
tabell om det finns någraFOREIGN KEY
begränsningar från andra tabeller som refererar till tabellen. Utländska nyckelbegränsningar mellan kolumner i samma tabell är tillåtna. -
Trunkeringsoperationer returnerar inte ett meningsfullt värde för antalet raderade rader., Det vanliga resultatet är ”0 rader påverkas”, som bör tolkas som ” ingen information.”
-
så länge tabelldefinitionen är giltig kan tabellen återskapas som en tom tabell med
TRUNCATE TABLE
, även om data-eller indexfilerna har skadats. -
alla
AUTO_INCREMENT
värdet återställs till sitt startvärde. Detta gäller även förMyISAM
ochInnoDB
, som normalt inte återanvänder sekvensvärden., -
när de används med partitionerade tabeller,
TRUNCATE TABLE
bevarar partitioneringen; det vill säga data-och indexfiler släpps och skapas igen, medan partitionsdefinitionerna inte påverkas. -
uttalandet
TRUNCATE TABLE
åberopar inteON DELETE
utlösare. -
Trunkera en skadad
InnoDB
tabell stöds.
TRUNCATE TABLE
för en tabell stänger alla Hanterare för tabellen som öppnades medHANDLER OPEN
.,
TRUNCATE TABLE
behandlas för binär loggning och replikering somDROP TABLE
följt avCREATE TABLE
—det vill säga som DDL snarare än DML. Detta beror på att när du använder InnoDB
och andra transaktionslagringsmotorer där transaktionsisoleringsnivån inte tillåter statementbaserad loggning (READ COMMITTED
eller READ UNCOMMITTED
) loggades och replikerades inte uttalandet när du använde STATEMENT
eller MIXED
på det sätt som beskrivits tidigare.
i MySQL 5.7 och tidigare, på ett system med en stor buffertpool och innodb_adaptive_hash_index
aktiverad, kan en TRUNCATE TABLE
– operation orsaka en tillfällig minskning av systemprestandan på grund av en LRU-skanning som inträffade när tabellens adaptiva hashindexposter togs bort (bugg #68184). Remapping av TRUNCATE TABLE
tillDROP TABLE
ochCREATE TABLE
I MySQL 8.0 undviker den problematiska LRU-skanningen.,
TRUNCATE TABLE
kan användas med Resultatschemasammanfattningstabeller, men effekten är att återställa sammanfattningskolumnerna till 0 ellerNULL
, för att inte ta bort rader. Se Avsnitt 27.12.18, ”Resultatschema Sammanfattande Tabeller”.
Trunkera enInnoDB
tabell som finns i en fil per tabell tablespace droppar den befintliga tablespace och skapar en ny. Från och med MySQL 8.0.,21, om tablespace skapades med en tidigare version och är bosatt i en okänd katalog, InnoDB
skapar det nya tablespace på standardplatsen och skriver följande varning till felloggen: datakatalogen plats måste vara i en känd katalog. Datakatalog plats kommer att ignoreras och filen kommer att sättas in i standarddatadir plats. Kända kataloger är de som definieras av variablernadatadir
,innodb_data_home_dir
ochinnodb_directories
., Om du vill ha TRUNCATE TABLE
skapa tablespace på den aktuella platsen lägger du till katalogen i inställningen innodb_directories
innan du kör TRUNCATE TABLE
.