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.,
a nagy teljesítmény elérése érdekében a TRUNCATE TABLE
megkerüli az adatok törlésének DML módját. Így nem okoz ON DELETE
tüzet, nem hajtható végre InnoDB
asztalok szülő-gyermek külföldi kulcskapcsolatokkal, és nem lehet visszahúzni, mint egy DML művelet. Azonban aTRUNCATE TABLE
az atomic DDL által támogatott tárolómotort használó táblákon végzett műveletek vagy teljesen elkötelezettek vagy visszahúzódnak, ha a kiszolgáló működése közben leáll. További információért lásd a 13.1 pontot.,1, “Atomic Data Definition Statement Support”.
bár TRUNCATE TABLE
hasonló a DELETE
– hoz, DDL-nyilatkozatnak minősül, nem pedig DML-nyilatkozatnak. Ez különbözik a DELETE
-tól a következő módokon:
-
csonka műveletek ejtik és újra létrehozzák a táblázatot, ami sokkal gyorsabb, mint az egyes sorok törlése, különösen a nagy táblázatok esetében.
-
A Csonka műveletek implicit kötelezettséget okoznak, így nem lehet visszafordulni. Lásd 13.3 Pont.,3, “olyan állítások, amelyek Implicit elkötelezettséget okoznak”.
-
csonkolási műveletek nem hajthatók végre, ha a munkamenet aktív asztalzárral rendelkezik.
-
a csonkolási műveletek nem adnak vissza értelmes értéket a törölt sorok számára., A szokásos eredmény “0 sor érintett”, amelyet “nincs információ” – ként kell értelmezni.”
-
mindaddig, amíg a táblázat meghatározása érvényes, a táblázat újra létrehozható üres táblaként a
TRUNCATE TABLE
, még akkor is, ha az adatok vagy indexfájlok sérültek. -
Any
AUTO_INCREMENT
érték visszaáll a kezdő értékre. Ez még aMyISAM
ésInnoDB
esetén is igaz, amelyek általában nem használják újra a sorozatértékeket., -
Ha a particionált táblák,
TRUNCATE TABLE
megőrzi az elválasztó; ez, az adatok, majd az index fájlok csökkent, majd újra létre, míg a partíció meghatározások nem változnak. -
a
TRUNCATE TABLE
utasítás nem hivatkozhatON DELETE
triggerek. -
csonka sérült
InnoDB
táblázat támogatott.
TRUNCATE TABLE
InnoDB
táblázat vagy NDB
táblázat, ha vannak FOREIGN KEY
táblázatok, amelyek hivatkoznak a táblára. Az ugyanazon táblázat oszlopai közötti külföldi kulcskorlátozások megengedettek.
TRUNCATE TABLE
egy táblázat bezárja az összes kezelő a tábla, hogy nyitottak a HANDLER OPEN
.,
TRUNCATE TABLE
bináris naplózás és replikáció céljából DROP TABLE
, majd CREATE TABLE
—azaz DDL helyett DML. Ez annak köszönhető, hogy az a tény, hogy amikor a InnoDB
, illetve egyéb tranzakciós tároló motorok, ahol a tranzakció izolációs szint nem teszi lehetővé, nyilatkozat-alapú naplózás (READ COMMITTED
vagy READ UNCOMMITTED
), a nyilatkozat nem volt bejelentkezve, majd reprodukálni, amikor a STATEMENT
vagy MIXED
naplózási mód., (Bug #36763) azonban még mindig alkalmazzák a replikák segítségével InnoDB
a korábban leírt módon.
a MySQL 5.7-ben és korábban egy nagy pufferkészlettel rendelkező rendszeren ésinnodb_adaptive_hash_index
engedélyezve van, a TRUNCATE TABLE
a művelet a rendszer teljesítményének ideiglenes csökkenését okozhatja egy LRU-vizsgálat miatt, amely a táblázat adaptív hash indexbejegyzéseinek eltávolításakor történt (Bug # 68184). A TRUNCATE TABLE
DROP TABLE
és CREATE TABLE
remappingje a MySQL 8.0-ban kerüli a problémás LRU-vizsgálatot.,
TRUNCATE TABLE
használható Teljesítményséma összefoglaló táblázatokkal, de a hatás az, hogy az összefoglaló oszlopokat 0 vagy NULL
– re állítsa vissza, ne távolítsa el a sorokat. Lásd A 27.12.18.Szakaszt, “Teljesítményséma Összefoglaló Táblázatok”.
egyInnoDB
táblázat, amely egy táblázatonkénti tablespace fájlban található, eldobja a meglévő táblaterületet, és létrehoz egy újat. Mivel a MySQL 8.0.,21, ha a táblaterület egy korábbi verzióval jött létre, és egy ismeretlen könyvtárban található, akkor a InnoDB
létrehozza az új táblaterületet az alapértelmezett helyen, és a következő figyelmeztetést írja a hibanaplóba: az adatkönyvtár helyének egy ismert könyvtárban kell lennie. Az adatkönyvtár helyét figyelmen kívül hagyja, majd a fájl kerül az alapértelmezett datadir helyen. Az ismert könyvtárak a datadir
, innodb_data_home_dir
, és innodb_directories
változók., Ha TRUNCATE TABLE
létrehozza a táblaterületet az aktuális helyén, adja hozzá a könyvtárat a innodb_directories
beállításhoz a TRUNCATE TABLE
futtatása előtt.