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ésInnoDBesetén is igaz, amelyek általában nem használják újra a sorozatértékeket., -
Ha a particionált táblák,
TRUNCATE TABLEmegő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 TABLEutasítás nem hivatkozhatON DELETEtriggerek. -
csonka sérült
InnoDBtá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 TABLEfuttatása előtt.