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 at opnå høj ydeevne, TRUNCATE TABLE
omgår DML-metoden til sletning af data. Således er det ikke forårsage ON DELETE
udløser brand, er det ikke udføres for InnoDB
tabeller med forældre-barn fremmed nøgle-relationer, og det kan ikke rulles tilbage, ligesom en DML operation. Dog TRUNCATE TABLE
operationer på tabeller, der bruger en atomisk DDL-understøttet lagringsmotor, er enten fuldt engagerede eller rullede tilbage, hvis serveren stopper under deres drift. For yderligere oplysninger, Se afsnit 13.1.,1, “Atomic Data Definition Erklæring Støtte”.
selvom TRUNCATE TABLE
ligner DELETE
, klassificeres det som en DDL-erklæring snarere end en DML-erklæring. Det adskiller sig fra DELETE
på følgende måder:
-
Afkorte operationer, fald og genskabe den tabel, der er meget hurtigere end at slette rækker én efter én, særlig for store tabeller.
-
afkortede operationer forårsager en implicit forpligtelse og kan derfor ikke rulles tilbage. Se Afsnit 13.3.,3, “udsagn, der forårsager en Implicit forpligtelse”.
-
Trunkeringsoperationer kan ikke udføres, hvis sessionen har en aktiv bordlås.
-
TRUNCATE TABLE
ikke for enInnoDB
tabelposition > > ellerNDB
tabel, hvis der er nogenFOREIGN KEY
begrænsninger fra andre tabeller, der refererer til tabellen. Udenlandske nøglebegrænsninger mellem kolonner i samme tabel er tilladt. -
Trunkeringsoperationer returnerer ikke en meningsfuld værdi for antallet af slettede rækker., Det sædvanlige resultat er “0 rækker påvirket”, som skal fortolkes som ” ingen oplysninger.”
-
så længe tabeldefinitionen er gyldig, kan tabellen genoprettes som en tom tabel med
TRUNCATE TABLE
, selvom data-eller indeksfilerne er blevet beskadiget. -
enhver
AUTO_INCREMENT
værdi nulstilles til startværdien. Dette gælder også forMyISAM
og , som normalt ikke genbruger sekvensværdier., -
når det bruges med partitionerede tabeller,
TRUNCATE TABLE
bevarer partitioneringen; det vil sige, at data-og indeksfilerne tabes og genskabes, mens partitionsdefinitionerne ikke påvirkes. -
TRUNCATE TABLE
erklæring påberåber sig ikkeON DELETE
triggere. -
afkortning af en beskadiget tabel understøttes.
TRUNCATE TABLE
for en tabel lukker alle handlere for tabellen, der blev åbnet med HANDLER OPEN
.,
TRUNCATE TABLE
er behandlet for anvendelsen af binær logning og replikering som DROP TABLE
efterfulgt af CREATE TABLE
—det er, som DDL snarere end DML. Dette er på grund af det faktum, at når du bruger InnoDB
og andre transaktionsbeslutning opbevaring motorer, hvor den transaction isolation level ikke tillade, at erklæring-baseret logging (READ COMMITTED
eller READ UNCOMMITTED
), den sætning var ikke logget ind og gentages, når du bruger STATEMENT
eller MIXED
logning., (Bug #36763) det anvendes dog stadig på replikaer ved hjælp af på den tidligere beskrevne måde.
I MySQL 5.7 og tidligere, på et system med en stor buffer pool og innodb_adaptive_hash_index
aktiveret TRUNCATE TABLE
operationen kunne medføre et midlertidigt fald i systemets ydeevne på grund af en LRU scanne der er opstået ved at fjerne tabellen er adaptive hash opslagsord (Bug #68184). Remapping af TRUNCATE TABLE
til DROP TABLE
og CREATE TABLE
i MySQL 8.0 undgår problematiske LRU scanning.,
TRUNCATE TABLE
kan bruges med Performance Skema oversigtstabeller, men effekten er at nulstille resumé kolonner til 0 eller NULL
, for ikke at fjerne rækker. Se Afsnit 27.12.18, “Oversigt Over Præstationsskemaer”. trunkering af en tabel, der findes i en fil-pr-tabel-spiseplads, dråber det eksisterende spiseområde og opretter en ny. Fra Mys 8L 8.0.,21, hvis det tablespace blev oprettet med en tidligere version, og er bosat i et ukendt bibliotek, InnoDB
opretter den nye tablespace på standardplaceringen, og skriver følgende advarsel til fejl log: DATA placering skal være i en kendt bibliotek. Den data mappe placering vil blive ignoreret, og filen vil blive sat i standard datadir placering. Kendt mapper er dem, der er defineret af datadir
innodb_data_home_dir
og innodb_directories
variabler., At have TRUNCATE TABLE
opret tablespace i dens nuværende placering, skal du tilføje mappen til den innodb_directories
indstilling, før du kører TRUNCATE TABLE
.