MySQL :: MySQL 8.0 Reference Manual :: 13.1.37 TRUNCATE TABLE Statement

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 een InnoDB table or NDB table if there are any FOREIGN 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 voor MyISAM en InnoDB, 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 niet ON DELETE triggers aan.

  • afkappen van een beschadigdeInnoDB 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 TABLEuitvoert.

Share

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *