MySQL :: MySQL 8.0 Reference Manual :: 13.1.37 TRUNCATE TABLE Statement (Deutsch)

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.,

Um eine hohe Leistung zu erzielen, umgeht TRUNCATE TABLE die DML-Methode zum Löschen von Daten. Daher werden keine ON DELETE-Trigger ausgelöst, es kann nicht für InnoDB – Tabellen mit Eltern-Kind-Fremdschlüsselbeziehungen ausgeführt werden und es kann nicht wie eine DML-Operation zurückgesetzt werden. TRUNCATE TABLE Operationen an Tabellen, die eine atomare DDL-unterstützte Speicher-Engine verwenden, werden jedoch entweder vollständig festgeschrieben oder zurückgesetzt, wenn der Server während ihres Betriebs angehalten wird. Weitere Informationen finden Sie unter Abschnitt 13.1.,1, „Atomic Daten Definition Anweisung Unterstützung“.

Obwohl TRUNCATE TABLE DELETE ähnlich ist, wird es eher als DDL-Anweisung als als DML-Anweisung klassifiziert. Es unterscheidet sich von DELETE auf folgende Weise:

  • Truncate Operationen löschen und neu erstellen Sie die Tabelle, die viel schneller ist als das Löschen von Zeilen nacheinander, insbesondere für große Tabellen.

  • Truncate-Operationen verursachen ein implizites Commit und können daher nicht zurückgesetzt werden. Siehe Abschnitt 13.3.,3, „Anweisungen, die ein implizites Commit verursachen“.

  • Kürzungsoperationen können nicht ausgeführt werden, wenn die Sitzung eine aktive Tabellensperre enthält.

  • TRUNCATE TABLE schlägt für eine InnoDB – Tabelle oder NDB – Tabelle fehl, wenn FOREIGN KEY – Einschränkungen aus anderen Tabellen vorliegen, die auf die Tabelle verweisen. Fremdschlüsseleinschränkungen zwischen Spalten derselben Tabelle sind zulässig.

  • Kürzungsoperationen geben keinen aussagekräftigen Wert für die Anzahl gelöschter Zeilen zurück., Das übliche Ergebnis ist „0 betroffene Zeilen“, was als „keine Informationen“ interpretiert werden sollte.“

  • Solange die Tabellendefinition gültig ist, kann die Tabelle als leere Tabelle mit TRUNCATE TABLE neu erstellt werden, auch wenn die Daten oder Indexdateien beschädigt wurden.

  • Jeder AUTO_INCREMENT Wert wird auf seinen Startwert zurückgesetzt. Dies gilt auch für MyISAM und InnoDB, die normalerweise keine Sequenzwerte wiederverwenden.,

  • Bei Verwendung mit partitionierten Tabellen behält TRUNCATE TABLE die Partitionierung bei; Das heißt, die Daten – und Indexdateien werden gelöscht und neu erstellt, während die Partitionsdefinitionen nicht betroffen sind.

  • DieTRUNCATE TABLE – Anweisung ruft keineON DELETE – Trigger auf.

  • das Abschneiden einer beschädigten InnoDB Tabelle unterstützt wird.

TRUNCATE TABLE für eine Tabelle schließt alle Handler für die Tabelle, die mit HANDLER OPEN geöffnet wurden.,

TRUNCATE TABLE wird zum Zwecke der binären Protokollierung und Replikation als DROP TABLE behandelt, gefolgt von CREATE TABLE—also als DDL und nicht als DML. Dies ist auf die Tatsache zurückzuführen, dass bei Verwendung von InnoDB und anderen Transaktionsspeichermaschinen, bei denen die Transaktionsisolationsstufe keine anweisungsbasierte Protokollierung zulässt (READ COMMITTED oder READ UNCOMMITTED), die Anweisung nicht protokolliert und repliziert wurde, wenn STATEMENT oder MIXED Protokollierungsmodus., (Fehler #36763) Es wird jedoch weiterhin auf Replikate mit InnoDB in der zuvor beschriebenen Weise angewendet.

In MySQL 5.7 und früher kann auf einem System mit aktiviertem großen Pufferpool und innodb_adaptive_hash_index eine TRUNCATE TABLE – Operation zu einem vorübergehenden Rückgang der Systemleistung aufgrund eines LRU-Scans führen, der beim Entfernen der adaptiven Hash-Indexeinträge der Tabelle aufgetreten ist (Fehler #68184). Die Neuzuordnung von TRUNCATE TABLE zu DROP TABLE und CREATE TABLE in MySQL 8.0 vermeidet den problematischen LRU-Scan.,

TRUNCATE TABLE kann mit Leistungsschema-Zusammenfassungstabellen verwendet werden, der Effekt besteht jedoch darin, die Zusammenfassungsspalten auf 0 oder NULL zurückzusetzen und keine Zeilen zu entfernen. Siehe Abschnitt 27.12.18 ,“ Leistungsschema-Zusammenfassungstabellen“.

Das Abschneiden einerInnoDB-Tabelle, die sich in einem Datei-pro-Tabelle-Tablespace befindet, löscht den vorhandenen Tablespace und erstellt einen neuen. Ab MySQL 8.0.,wenn der Tablespace mit einer früheren Version erstellt wurde und sich in einem unbekannten Verzeichnis befindet, erstellt InnoDB den neuen Tablespace am Standardspeicherort und schreibt die folgende Warnung in das Fehlerprotokoll: Der Speicherort des DATENVERZEICHNISSES muss sich in einem bekannten Verzeichnis befinden. Der Speicherort des DATENVERZEICHNISSES wird ignoriert und die Datei wird in den Standardspeicherort datadir abgelegt. Bekannte Verzeichnisse sind diejenigen, die durch die Variablen datadir, innodb_data_home_dir und innodb_directories definiert sind., Um TRUNCATE TABLE den Tablespace an seinem aktuellen Speicherort erstellen zu lassen, fügen Sie das Verzeichnis der Einstellung hinzu, bevor Sie TRUNCATE TABLE.

Share

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.