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.,
pro dosažení vysokého výkonu TRUNCATE TABLE
obchází metodu DML mazání dat. Tak, to nezpůsobuje ON DELETE
aktivačních událostí na oheň, nemůže být provedena na InnoDB
tabulky s rodič-dítě cizí klíč vztahy, a to nemůže být vrácena zpět jako DML operace. Nicméně, TRUNCATE TABLE
operace na tabulkách, které používají atomové DDL-podporované storage engine jsou buď zcela potvrzena nebo vrácena zpět, pokud se server zastaví během jejich provozu. Více informací viz bod 13.1.,1, „Podpora Prohlášení O Definici Atomových Dat“.
ačkoli TRUNCATE TABLE
je podobný DELETE
, je klasifikován spíše jako příkaz DDL než příkaz DML. To se liší od DELETE
následujícím způsobem:
-
Truncate operace přetažení a znovu vytvořit tabulky, která je mnohem rychlejší, než mazání řádky jeden po druhém, a to zejména pro velké stoly.
-
zkrácené operace způsobují implicitní commit, a proto nelze vrátit zpět. Viz Bod 13.3.,3, „prohlášení, která způsobují implicitní spáchání“.
-
operace zkrácení nelze provést, pokud relace obsahuje aktivní zámek tabulky.
-
TRUNCATE TABLE
nezdaříInnoDB
tabulka neboNDB
stolu, pokud tam jsou nějakéFOREIGN KEY
omezení z jiných tabulek, které se odkazují na tabulky. Cizí klíčové omezení mezi sloupci stejné tabulky jsou povoleny. -
operace zkrácení nevracejí smysluplnou hodnotu pro počet odstraněných řádků., Obvyklým výsledkem je „0 řádků“, které by měly být interpretovány jako “ žádné informace.“
-
tak dlouho, Jak definice tabulky je platné, tabulka může být znovu vytvořena jako prázdná tabulka s
TRUNCATE TABLE
, i když data nebo index files byly poškozeny. -
Any
AUTO_INCREMENT
hodnota je resetována na počáteční hodnotu. To platí i proMyISAM
aInnoDB
, které normálně nepoužívají sekvenční hodnoty., -
Při použití s oddíly tabulky,
TRUNCATE TABLE
zachovává rozdělení; to je, datové a indexové soubory jsou vynechána a znovu vytvořit, zatímco oddíl definice jsou nedotčeny. -
TRUNCATE TABLE
příkaz nevyvoláváON DELETE
spouští. -
zkrácení poškozeného
InnoDB
tabulka je podporována.
TRUNCATE TABLE
pro tabulku zavře všechny manipulátory pro tabulku, která byla otevřena pomocí HANDLER OPEN
.,
TRUNCATE TABLE
je zacházeno pro účely binární protokolování a replikace jako DROP TABLE
následuje CREATE TABLE
—to je to, jak DDL, spíše než DML. To je způsobeno tím, že při používání InnoDB
a další transakční skladování motory, kde je úroveň izolace transakce neumožňuje prohlášení založené na protokolování (READ COMMITTED
nebo READ UNCOMMITTED
), prohlášení nebyla zaznamenána a replikovány, když se pomocí STATEMENT
nebo MIXED
režim protokolování., (Bug #36763) nicméně, to je ještě aplikován na repliky pomocí InnoDB
způsobem popsaným dříve.
V MySQL 5.7 a dříve, v systému s velké vyrovnávací paměti a innodb_adaptive_hash_index
povoleno TRUNCATE TABLE
operace může způsobit dočasný pokles výkonnosti systému v důsledku LRU skenování, že došlo při odstraňování tabulka je adaptivní hash index položky (Bug #68184). Přemapování TRUNCATE TABLE
DROP TABLE
CREATE TABLE
v MySQL 8.0 se vyhýbá problematické LRU skenování.,
TRUNCATE TABLE
může být použit s Výkonem Schématu souhrnné tabulky, ale efekt je obnovit souhrnné sloupce 0 nebo NULL
, ne odstranit řádky. Viz Bod 27.12.18″Tabulky Souhrnu Schématu Výkonu“.
zkráceníInnoDB
tabulky, která se nachází v souboru-per-table tablespace klesne stávající tablpace a vytvoří novou. Od MySQL 8.0.,21, pokud tablespace byl vytvořen pomocí dřívější verze a sídlí v neznámém adresář, InnoDB
vytvoří nové tablespace, ve výchozím umístění a zapisuje následující varování do protokolu chyb: DATOVÝ ADRESÁŘ umístění musí být v adresáři známým. Umístění datového adresáře bude ignorováno a soubor bude vložen do výchozího umístění datadiru. Známé adresáře jsou definovány proměnnými datadir
, innodb_data_home_dir
a innodb_directories
., TRUNCATE TABLE
vytvořit tablespace, ve své aktuální polohy, přidejte adresář do innodb_directories
nastavení před spuštěním TRUNCATE TABLE
.