Detaillierte Erklärung der MySQL Truncate-Verwendung

Detaillierte Erklärung der MySQL Truncate-Verwendung

Es gibt zwei Möglichkeiten, Daten in einer Tabelle zu löschen: Löschen und Abschneiden. Mit TRUNCATE TABLE können Sie alle Zeilen einer Tabelle löschen, ohne die Löschvorgänge einzelner Zeilen aufzuzeichnen. TRUNCATE TABLE ähnelt einer DELETE-Anweisung ohne WHERE-Klausel; TRUNCATE TABLE ist jedoch schneller und verwendet weniger System- und Transaktionsprotokollressourcen. Im Folgenden wird die Verwendung von Truncate in SQL beschrieben.

Wenn Sie die Tabelle nicht mehr benötigen, verwenden Sie „drop“. Wenn Sie die Tabelle behalten, aber alle Datensätze löschen möchten, verwenden Sie „truncate“. Wenn Sie einige Datensätze löschen möchten (immer mit einer WHERE-Klausel), verwenden Sie „delete“.

Truncate ist eine SQL-Syntax, mit der alle Daten in einer Tabelle schnell gelöscht werden können. Außerdem kann die Anzahl auf Null zurückgesetzt und Felder mit automatisch erhöhten Werten neu berechnet werden.

MySQL Truncate-Verwendung

1. Truncate-Syntax

[ { Datenbankname.[ Schemaname ]. | Schemaname . } ]
Tabellenname
[ ; ]

Parameter

Datenbankname
Der Name der Datenbank.

Schemaname
Der Name des Schemas, zu dem die Tabelle gehört.

Tabellenname
Der Name der Tabelle, die gekürzt werden soll, oder der Name der Tabelle, deren Zeilen gelöscht werden sollen.

2. Vorsichtsmaßnahmen bei der Verwendung von Truncate

1. TRUNCATE TABLE ist funktional identisch mit einer DELETE-Anweisung ohne WHERE-Klausel: beide löschen alle Zeilen in einer Tabelle. TRUNCATE TABLE ist jedoch schneller als DELETE und verwendet weniger System- und Transaktionsprotokollressourcen.

2. Die DELETE-Anweisung löscht jeweils eine Zeile und zeichnet für jede gelöschte Zeile einen Eintrag im Transaktionsprotokoll auf. TRUNCATE TABLE entfernt Daten, indem es die zum Speichern der Tabellendaten verwendeten Datenseiten freigibt, und zeichnet nur die Freigabe der Seiten im Transaktionsprotokoll auf.

3. TRUNCATE TABLE löscht alle Zeilen in der Tabelle, aber die Tabellenstruktur und ihre Spalten, Einschränkungen, Indizes usw. bleiben unverändert. Der zum Identifizieren neuer Zeilen verwendete Zählwert wird auf den Startwert für die Spalte zurückgesetzt. Wenn Sie den Identitätszählerwert beibehalten möchten, verwenden Sie stattdessen DELETE. Wenn Sie eine Tabellendefinition und ihre Daten löschen möchten, verwenden Sie die Anweisung DROP TABLE.

4. Für Tabellen, auf die durch FOREIGN KEY-Einschränkungen verwiesen wird, kann TRUNCATE TABLE nicht verwendet werden. Stattdessen sollte eine DELETE-Anweisung ohne WHERE-Klausel verwendet werden. Da TRUNCATE TABLE nicht protokolliert wird, kann es keine Trigger aktivieren.

5. TRUNCATE TABLE kann nicht für Tabellen verwendet werden, die an indizierten Ansichten teilnehmen.

6. Wenn Sie Daten zu einer Tabelle hinzufügen, die mit TRUNCATE TABLE gelöscht wurde, verwenden Sie UPDATE STATISTICS, um die Indexinformationen beizubehalten.

7. Wenn eine ROLLBACK-Anweisung vorhanden ist, wird der DELETE-Vorgang rückgängig gemacht, der TRUNCATE-Vorgang jedoch nicht.

3. TRUNCATE TABLE kann nicht auf die folgenden Tabellen angewendet werden

1. Tabellen, auf die durch FOREIGN KEY-Einschränkungen verwiesen wird. (Sie können eine Tabelle abschneiden, die einen Fremdschlüssel hat, der auf sich selbst verweist.)

2. An der Indexansicht teilnehmende Tabellen.

3. Mithilfe einer Transaktionsreplikation oder einer Mergereplikation veröffentlichte Tabellen.

4. Verwenden Sie für Tabellen mit einer oder mehreren der oben genannten Eigenschaften die DELETE-Anweisung.

5. TRUNCATE TABLE kann keine Trigger aktivieren, da der Vorgang das Löschen einzelner Zeilen nicht aufzeichnet.

IV. Unterschiede zwischen TRUNCATE, Drop und Delete

1. Drop und Delete löschen nur die Daten (Definition) der Tabelle. Die Drop-Anweisung löscht die Tabellenstruktur, abhängige Einschränkungen, Trigger und Indizes; die gespeicherten Prozeduren/Funktionen, die von der Tabelle abhängen, bleiben erhalten, werden aber ungültig.
2. Die Löschanweisung ist eine DML-Sprache. Dieser Vorgang wird im Rollback-Segment platziert und wird erst wirksam, nachdem die Transaktion festgeschrieben wurde. Wenn ein entsprechender Trigger vorhanden ist, wird er bei der Ausführung ausgelöst. Truncate und Drop sind DDL-Sprachen. Sie werden unmittelbar nach der Operation wirksam. Die Originaldaten werden nicht in das Rollback übernommen und können nicht zurückgesetzt werden. Die Operation löst den Trigger nicht aus.

3. Die Löschanweisung hat keinen Einfluss auf den von der Tabelle belegten Umfang und die Hochwassermarke verbleibt an ihrer ursprünglichen Position. Die Drop-Anweisung gibt den gesamten von der Tabelle belegten Speicherplatz frei. Standardmäßig gibt die Truncate-Anweisung Speicherplatz im Umfang von Minextents frei, sofern kein wiederverwendeter Speicher verwendet wird. Durch Abschneiden wird die Hochwassermarke zurückgesetzt (zurück zum Anfang).

4. Effizienz: löschen > abschneiden > löschen

5. Sicherheit: Verwenden Sie „Drop“ und „Truncate“ mit Vorsicht, insbesondere wenn kein Backup vorhanden ist. Wenn Sie einige Daten löschen möchten, können Sie „Delete“ mit einer Where-Klausel verwenden und das Rollback-Segment muss groß genug sein. Wenn Sie eine Tabelle löschen möchten, können Sie „Drop“ verwenden. Wenn Sie die Tabelle behalten, aber nur alle Daten in der Tabelle löschen möchten, können Sie „Truncate“ verwenden, wenn es nicht mit der Transaktion zusammenhängt. Wenn es mit der Transaktion zusammenhängt oder Sie einen Trigger auslösen möchten, verwenden Sie trotzdem „Delete“. Wenn Sie die Fragmente innerhalb der Tabelle aussortieren möchten, können Sie „Truncate“ verwenden, gefolgt von „Reuse Storage“ und dann die Daten erneut importieren und einfügen.

6.delete ist eine DML-Anweisung und wird nicht automatisch übermittelt. Drop/Truncate sind beides DDL-Anweisungen und werden nach der Ausführung automatisch festgeschrieben.

7. „Drop“ wird im Allgemeinen zum Löschen allgemeiner Daten wie Tabellen, Schemata, Indizes, Ansichten, Integritätsbeschränkungen usw. verwendet; „Delete“ wird zum Löschen lokaler Daten wie eines Tupels in einer Tabelle verwendet.

8. DROP löscht die Tabellenstruktur; DELETE löscht nur die Daten

9. Wenn Sie die Tabelle nicht mehr benötigen, verwenden Sie „drop“. Wenn Sie die Tabelle behalten, aber alle Datensätze löschen möchten, verwenden Sie „truncate“. Wenn Sie einige Datensätze löschen möchten (immer mit einer WHERE-Klausel), verwenden Sie „delete“.

Unterschied zwischen TRUNCATE und DELETE in MYSQL

In MYSQL können sowohl TRUNCATE als auch DELETE die Daten in der Tabelle bereinigen, aber was ist der Unterschied zwischen ihnen? Wir analysieren aus folgenden Gründen:

1. Bedingte Löschung

Dies ist leichter zu verstehen, da DELETE eine WHERE-Klausel haben kann und daher bedingtes Löschen unterstützt; TRUNCATE kann hingegen nur die gesamte Tabelle löschen.

# löschen – bedingtes Löschen DELETE FROM student WHERE id = 1;
# löschen – löscht die Daten der gesamten Tabelle DELETE FROM student;
# truncate – löscht die Daten der gesamten Tabelle TRUNCATE TABLE student;

2. Transaktions-Rollback

Da DELETE eine Datenmanipulationssprache (DML) ist, werden die Originaldaten während des Vorgangs im Rollback-Segment abgelegt und können zurückgesetzt werden. TRUNCATE hingegen ist eine Datendefinitionssprache (DDL). Die Originaldaten werden während des Vorgangs nicht gespeichert und können nicht zurückgesetzt werden.

Sie können sehen, dass DELETE erfolgreich zurückgesetzt werden kann.

Es ist ersichtlich, dass TRUNCATE nicht erfolgreich zurückgesetzt werden kann.

3. Reinigungsgeschwindigkeit

Wenn die Datenmenge relativ klein ist, ist der Unterschied in der Bereinigungsgeschwindigkeit zwischen DELETE und TRUNCATE nicht sehr groß. Bei großen Datenmengen ist der Unterschied jedoch deutlich zu erkennen. Wie im zweiten Punkt erwähnt, muss TRUNCATE kein Rollback unterstützen und verwendet daher weniger System- und Transaktionsprotokollressourcen. Die DELETE-Anweisung löscht jeweils eine Zeile und zeichnet für jede gelöschte Zeile einen Eintrag im Transaktionsprotokoll auf. Obwohl dies langsam ist, ist es relativ sicher.

4. Zurücksetzen der Hochwassermarke

Da DML-Operationen kontinuierlich an Tabellendatensätzen durchgeführt werden, steigt die High Water Mark (HWM) der Tabelle weiter an. Obwohl die Daten in der Tabelle nach der DELETE-Operation gelöscht werden, wird die High Water Mark der Tabelle nicht gesenkt. Da DML-Operationen durchgeführt werden, steigt die Datenbankkapazität nur an, sie sinkt nicht. Wenn DELETE verwendet wird, ist die Abfragegeschwindigkeit daher auch dann dieselbe wie vor dem DELETE-Vorgang, wenn die Datenmenge in der Tabelle stark reduziert ist.
Der TRUNCATE-Vorgang setzt die Hochwassermarke zurück, die Datenbankkapazität wird ebenfalls zurückgesetzt und die Geschwindigkeit nachfolgender DML-Vorgänge wird ebenfalls verbessert.

Ergänzung zur Verwendung von MySQL Truncate

Vorwort:

Wenn wir eine Tabelle löschen möchten, verwenden wir häufig die Truncate-Anweisung. Meistens kümmern wir uns nur darum, ob die Anforderungen erfüllt werden können, ohne über die Anwendungsszenarien und Vorsichtsmaßnahmen solcher Aussagen nachzudenken. Dieser Artikel stellt hauptsächlich die Verwendung und Vorsichtsmaßnahmen der Truncate-Anweisung vor.

1.Truncate-Verwendungssyntax

Die Funktion von Truncate besteht darin, die Tabelle zu löschen oder abzuschneiden, und kann nur auf die Tabelle angewendet werden. Die Syntax von „truncate“ ist sehr einfach, lassen Sie einfach den Tabellennamen folgen.

Beispiel: truncate table tbl_name oder truncate tbl_name .

Zum Ausführen der Truncate-Anweisung ist die Drop-Berechtigung für die Tabelle erforderlich. Logisch gesehen ähnelt Truncate Table einer Delete-Anweisung, die alle Zeilen löscht, oder einer Kombination aus Drop Table und anschließender Create Table-Anweisung. Um eine hohe Leistung zu erreichen, wird die DML-Methode zum Löschen von Daten umgangen, sodass kein Rollback möglich ist. Obwohl „truncate table“ dem „delete“ ähnelt, wird es als DDL-Anweisung und nicht als DML-Anweisung klassifiziert.

2. Vergleich zwischen Truncate, Drop und Delete

Wie oben erwähnt, ist Truncate Delete und Drop sehr ähnlich. Tatsächlich gibt es zwischen diesen dreien noch erhebliche Unterschiede. Im Folgenden finden Sie einen kurzen Vergleich der Ähnlichkeiten und Unterschiede zwischen den dreien.

  • „truncate“ und „drop“ sind DDL-Anweisungen und können nach der Ausführung nicht zurückgesetzt werden; „delete“ ist eine DML-Anweisung und kann zurückgesetzt werden.
  • „truncate“ kann nur auf Tabellen angewendet werden; „delete“ und „drop“ können auf Tabellen, Ansichten usw. angewendet werden.
  • Mit Truncate werden alle Zeilen in der Tabelle gelöscht, die Tabellenstruktur und ihre Einschränkungen, Indizes usw. bleiben jedoch unverändert. Mit drop werden die Tabellenstruktur und die Einschränkungen, Indizes usw. gelöscht, von denen sie abhängt.
  • Durch Abschneiden wird der Autoinkrementwert der Tabelle zurückgesetzt. Durch Löschen geschieht dies nicht.
  • Durch Truncate werden die mit der Tabelle verknüpften Löschtrigger nicht aktiviert; durch Löschen geschieht dies.
  • Nach dem Abschneiden wird der von der Tabelle und dem Index belegte Speicherplatz auf die ursprüngliche Größe zurückgesetzt. Der Löschvorgang verringert den von der Tabelle oder dem Index belegten Speicherplatz nicht und die Drop-Anweisung gibt den gesamten von der Tabelle belegten Speicherplatz frei.

3. Nutzungsszenarien und Vorsichtsmaßnahmen einschränken

Durch die vorherige Einführung können wir das Verwendungsszenario der Truncate-Anweisung leicht ableiten, dh Truncate kann verwendet werden, wenn die Tabellendaten völlig unnötig sind. Wenn Sie einige Daten löschen möchten, verwenden Sie „delete“, und denken Sie daran, eine Where-Klausel einzuschließen. Wenn Sie eine Tabelle löschen möchten, verwenden Sie natürlich „drop“. Wenn Sie die Tabelle behalten und alle Daten löschen möchten und diese nichts mit Transaktionen zu tun haben, verwenden Sie „truncate“. Wenn sie mit Transaktionen zusammenhängt oder Sie einen Trigger auslösen möchten, verwenden Sie trotzdem „delete“. Wenn Sie die Fragmente innerhalb der Tabelle sortieren möchten, können Sie „truncate“ verwenden und die Daten anschließend erneut einfügen.

In jedem Fall ist das Abschneiden von Tabellen ein risikoreicher Vorgang, insbesondere in Produktionsumgebungen müssen Sie vorsichtiger sein. Hier sind einige zu beachtende Punkte. Ich hoffe, Sie können sie bei der Verwendung als Referenz verwenden.

  • Truncate kann nicht über Binärlog zurückgesetzt werden.
  • Truncate löscht alle Daten und wird sehr schnell ausgeführt.
  • Truncate kann nicht auf Tabellen angewendet werden, auf die durch Fremdschlüsseleinschränkungen verwiesen wird.
  • Zum Ausführen von Truncate ist die Drop-Berechtigung erforderlich. Es wird nicht empfohlen, dem Konto die Drop-Berechtigung zu erteilen.
  • Überprüfen und bestätigen Sie unbedingt noch einmal, bevor Sie Truncate ausführen. Am besten sichern Sie die folgenden Tabellendaten vorher.

Oben finden Sie ausführliche Informationen zur Verwendung von MySQL Truncate. Weitere Informationen zu MySQL Truncate finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung der Truncate-Verwendung in MySQL
  • Detaillierte Erklärung der Truncate-Verwendung in MySQL

<<:  Detailliertes Tutorial zur Anmeldung am System mit dem Root-Benutzer in der neuen Version von Ubuntu 20.04

>>:  React+axios implementiert die Suchbenutzerfunktion von GitHub (Beispielcode)

Artikel empfehlen

MySQL-Ansichtsprinzipien und grundlegende Bedienungsbeispiele

Dieser Artikel veranschaulicht anhand von Beispie...

Eine kurze Diskussion über benutzerdefinierte VUE-Uni-App-Komponenten

1. Übergeordnete Komponenten können Daten über Re...

Verwenden von Vue zum Implementieren einer Timerfunktion

In diesem Artikelbeispiel wird der spezifische Co...

Analyse des Implementierungsprozesses für die Tomcat maxPostSize-Einstellung

1. Warum maxPostSize festlegen? Der Tomcat-Contai...

Detaillierte Erklärung des Vue2 Cube-UI-Zeitwählers

Inhaltsverzeichnis Vorwort 1. Anspruch und Wirkun...

So lassen Sie DOSBox nach dem Start automatisch Befehle ausführen

Mit DOSBox können Sie DOS unter Windows simuliere...

CSS3 verwendet Animationsattribute, um coole Effekte zu erzielen (empfohlen)

animation-name Animationsname, kann mehrere Werte...

Verbesserung der Aktualisierungsfunktion für Zen-Codierungsressourcen

Offizielle Website: http://code.google.com/p/zen-c...

Detaillierte Erklärung der MySQL-Zeichenfolgenverkettungsfunktion GROUP_CONCAT

Im vorherigen Artikel habe ich ein tabellenübergr...

Bild-Scrolling-Effekt mit CSS3 erstellt

Ergebnisse erzielenImplementierungscode html <...

Installationsschritte für die chinesische Eingabemethode von Ubuntu 20.04

Dieser Artikel installiert die Google-Eingabemeth...