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.,
om hoge prestaties te bereiken, omzeilt TRUNCATE TABLE
de DML-methode voor het verwijderen van gegevens. Het zorgt er dus niet voor dat ON DELETE
triggers branden, het kan niet worden uitgevoerd voor InnoDB
tabellen met ouder-kind buitenlandse sleutelrelaties, en het kan niet worden teruggedraaid als een DML-operatie. TRUNCATE TABLE
operaties op tabellen die gebruik maken van een atomaire DDL-ondersteunde opslag engine worden ofwel volledig gecommit of teruggedraaid als de server stopt tijdens hun werking. Zie punt 13.1 Voor meer informatie.,1, “Atomic Data Definition Statement Support”.
hoewel TRUNCATE TABLE
vergelijkbaar is met DELETE
, wordt het geclassificeerd als een DDL-statement in plaats van een DML-statement. Het verschilt van DELETE
op de volgende manieren:
-
afkappen operaties laten vallen en opnieuw aanmaken van de tabel, wat veel sneller is dan het één voor één verwijderen van rijen, vooral voor grote tabellen.
-
afkappen operaties veroorzaken een impliciete commit, en kunnen dus niet teruggedraaid worden. Zie Punt 13.3.,3, “verklaringen die een impliciete Commit veroorzaken”.
-
Afkortbewerkingen kunnen niet worden uitgevoerd als de sessie een actieve tabelvergrendeling bevat.
-
TRUNCATE TABLE
mislukt voor eenInnoDB
table orNDB
table if there are anyFOREIGN KEY
constraints from other tables that reference the table. Buitenlandse belangrijke beperkingen tussen kolommen van dezelfde tabel zijn toegestaan. -
Afkortbewerkingen geven geen betekenisvolle waarde voor het aantal verwijderde rijen., Het gebruikelijke resultaat is “0 rijen beïnvloed,” die moet worden geïnterpreteerd als ” geen informatie.”
-
zolang de tabeldefinitie geldig is, kan de tabel opnieuw worden aangemaakt als een lege tabel met
TRUNCATE TABLE
, zelfs als de data-of indexbestanden beschadigd zijn geraakt. -
elke
AUTO_INCREMENT
waarde wordt teruggezet naar de startwaarde. Dit geldt zelfs voorMyISAM
enInnoDB
, die normaal gesproken geen reekswaarden hergebruiken., -
wanneer gebruikt met gepartitioneerde tabellen, behoudt
TRUNCATE TABLE
de partitionering; dat wil zeggen, de gegevens en indexbestanden worden verwijderd en opnieuw aangemaakt, terwijl de partitiedefinities onaangetast blijven. -
de instructie
TRUNCATE TABLE
roept nietON DELETE
triggers aan. -
afkappen van een beschadigde
InnoDB
tabel wordt ondersteund.
TRUNCATE TABLE
voor een tabel sluit alle handlers voor de tabel die werden geopend met HANDLER OPEN
.,
TRUNCATE TABLE
wordt behandeld voor binaire logging en replicatie als DROP TABLE
gevolgd door CREATE TABLE
—dat wil zeggen, als DDL in plaats van DML. Dit is te wijten aan het feit dat bij gebruik van InnoDB
en andere transactionele opslag-engines waarbij het transactiesisolatieniveau statement-based logging (READ COMMITTED
of READ UNCOMMITTED
) niet is gelogd en gerepliceerd bij gebruik van STATEMENT
of MIXED
logging mode., (Bug # 36763) het wordt echter nog steeds toegepast op replica ‘ s met InnoDB
op de eerder beschreven manier.
in MySQL 5.7 en eerder, op een systeem met een grote bufferpool en innodb_adaptive_hash_index
ingeschakeld, kan een operatie TRUNCATE TABLE
een tijdelijke daling van de systeemprestaties veroorzaken als gevolg van een LRU-scan die plaatsvond bij het verwijderen van de adaptieve hash-indexingangen van de tabel (Bug #68184). De herindeling van TRUNCATE TABLE
naar DROP TABLE
en CREATE TABLE
in MySQL 8.0 vermijdt de problematische LRU-scan.,
TRUNCATE TABLE
kan worden gebruikt met samenvattingstabellen voor Prestatieschema ‘ s, maar het effect is dat de samenvattingstabellen worden gereset naar 0 of NULL
, niet om rijen te verwijderen. Zie Punt 27.12.18, “Overzichtstabellen Van Prestatieschema ‘S”.
afkappen van een InnoDB
tabel die zich in een bestand bevindt-per-table tablespace laat de bestaande tablespace vallen en maakt een nieuwe aan. Vanaf MySQL 8.0.,21, als de tablespace is aangemaakt met een eerdere versie en zich in een onbekende map bevindt, maakt InnoDB
de nieuwe tablespace aan op de standaardlocatie en schrijft de volgende waarschuwing naar het foutlogboek: de locatie van de data DIRECTORY moet zich in een bekende map bevinden. De DATA DIRECTORY locatie zal worden genegeerd en het bestand zal worden gezet in de standaard datadir locatie. Bekende mappen zijn die gedefinieerd door de variabelen datadir
, innodb_data_home_dir
, en innodb_directories
., Om TRUNCATE TABLE
de tablespace op zijn huidige locatie aan te maken, voegt u de map toe aan de instelling innodb_directories
voordat u TRUNCATE TABLE
uitvoert.