Heim  >  Artikel  >  Datenbank  >  Eine kurze Analyse der MySQL-Löschmethoden: der Unterschied zwischen Löschen, Abschneiden und Löschen

Eine kurze Analyse der MySQL-Löschmethoden: der Unterschied zwischen Löschen, Abschneiden und Löschen

青灯夜游
青灯夜游nach vorne
2022-06-08 13:49:182350Durchsuche

Eine kurze Analyse der MySQL-Löschmethoden: der Unterschied zwischen Löschen, Abschneiden und Löschen

In MySQL gibt es insgesamt drei Löschmethoden: Löschen, Abschneiden und Löschen. Die Verwendungs- und Verwendungsszenarien der drei sind völlig unterschiedlich.

1.delete

detele kann verwendet werden, um einige oder alle Daten in einer Tabelle zu löschen. Die Verwendungssyntax lautet wie folgt:

delete from table_name [where...] [order by...] [limit...]

PS: Die Befehle in [] sind optionale Befehle und können weggelassen werden.

Wenn wir die drei besten Schüler mit den höchsten Mathematikergebnissen in der Schülertabelle löschen möchten, können wir das folgende SQL verwenden:

delete from student order by math desc limit 3;

1.1 Löschimplementierungsprinzip

In der InnoDB-Engine ist der Löschvorgang nicht möglich Löschen Sie die Daten tatsächlich. Stattdessen werden die Daten zum Löschen markiert und als gelöscht markiert. Wir können dies testen und überprüfen, indem wir MySQL auf den nichtautomatischen Übermittlungsmodus einstellen. Die SQL-Einstellung für den nichtautomatischen Festschreibungsmodus lautet wie folgt:

set autocommit=0;

Danach löschen Sie zuerst Daten, verwenden Sie dann den Rollback-Vorgang und überprüfen Sie abschließend, ob die zuvor gelöschten Daten noch vorhanden sind Löschen ist nicht die Daten werden wirklich gelöscht, sondern markieren die Daten nur als gelöscht. Die Überprüfungs-SQL und die Ausführungsergebnisse sind in der folgenden Abbildung dargestellt:

Eine kurze Analyse der MySQL-Löschmethoden: der Unterschied zwischen Löschen, Abschneiden und Löschen

1.2 Informationen zur automatischen Inkrementierung von Spalten

In der InnoDB-Engine , delete wird verwendet, um alle Daten zu löschen. Die automatische Inkrementierungsspalte wird nicht auf den Anfangswert zurückgesetzt. Wir können dies mit dem folgenden Befehl überprüfen:

Eine kurze Analyse der MySQL-Löschmethoden: der Unterschied zwischen Löschen, Abschneiden und Löschen

2.truncate

truncate Der Ausführungseffekt ist ähnlich zu löschen, und es wird auch zum Löschen aller Daten in der Tabelle verwendet. Für Zeilendaten lautet die Verwendungssyntax wie folgt:

truncate [table] table_name

Der größte Unterschied zwischen Abschneiden und Löschen besteht darin, dass delete bedingte Ausdrücke verwenden kann, um Teile zu löschen der Daten, während Truncate keine bedingten Ausdrücke hinzufügen kann, sodass nur alle Zeilendaten gelöscht werden können , beispielsweise meldet das folgende Truncate nach dem Hinzufügen des Where-Befehls einen Fehler:

Eine kurze Analyse der MySQL-Löschmethoden: der Unterschied zwischen Löschen, Abschneiden und Löschen

2.1 Prinzip der Truncate-Implementierung

truncate scheint nur Zeilendaten zu löschen, es handelt sich jedoch um eine DDL-Anweisung, d. Datenmanipulationssprache, die zum Bearbeiten von Daten verwendet wird. Warum löscht das Abschneiden nur Zeilendaten, aber keine Spaltendaten (Felder, Indizes usw.), obwohl es sich um eine DDL-Sprache handelt? Dies liegt daran, dass Truncate im Wesentlichen eine neue Tabellenstruktur erstellt und dann die ursprüngliche Tabelle löscht, sodass sie zur DDL-Sprache und nicht zur DML-Sprache gehört.

2.2 Zurücksetzen der Auto-Inkrement-Spalte

truncate setzt die Auto-Inkrement-Spalte in der InnoDB-Engine zurück, wie im folgenden Befehl gezeigt:

Eine kurze Analyse der MySQL-Löschmethoden: der Unterschied zwischen Löschen, Abschneiden und Löschen

3.drop

drop und die ersten beiden Befehle löschen nur die Zeilendaten und die Tabellenstruktur der gesamten Tabelle. Die Syntax lautet wie folgt:

DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [,tbl_name]

wobei TEMPORARY für temporäre Tabelle steht ignoriert.

Verwendungsbeispiele für Drop sind wie folgt:

Eine kurze Analyse der MySQL-Löschmethoden: der Unterschied zwischen Löschen, Abschneiden und Löschen

Der Unterschied zwischen den drei

  • In Bezug auf die Datenwiederherstellung: Löschen kann gelöschte Daten wiederherstellen, während Abschneiden und Löschen gelöschte Daten nicht wiederherstellen kann.

  • Ausführungsgeschwindigkeit: Löschen > abschneiden >

  • In Bezug auf das Löschen von Daten: „Drop“ löscht die gesamte Tabelle, einschließlich Zeilendaten, Felder, Indizes und andere Daten, während „Truncate and Drop“ nur Zeilendaten löscht.

  • In Bezug auf das Hinzufügen von Bedingungen: Beim Löschen können Where-Ausdrücke zum Hinzufügen von Abfragebedingungen verwendet werden, während beim Abschneiden und Löschen keine Where-Abfragebedingungen hinzugefügt werden können.

  • Automatisch inkrementierende Spalten zurücksetzen: In der InnoDB-Engine können durch „Truncate“ automatisch inkrementierte Spalten zurückgesetzt werden, durch „Delete“ können jedoch keine automatisch inkrementierten Spalten zurückgesetzt werden.

Zusammenfassung

Mit Löschen und Abschneiden können Zeilendaten in der Tabelle gelöscht werden, während durch Löschen die gesamte Tabelle gelöscht wird. Die gelöschten Daten umfassen alle Zeilendaten, Felder, Indizes und andere Daten, wobei durch Löschen die Daten gelöscht werden .kann wiederhergestellt werden, während Truncate und Drop nicht wiederherstellbar sind, aber im Hinblick auf die Ausführungseffizienz haben die beiden letztgenannten Löschmethoden große Vorteile, daher sollte der entsprechende Löschbefehl entsprechend dem tatsächlichen Szenario ausgewählt werden Nicht wiederherstellbar. Seien Sie vorsichtig, wenn Sie die Datenlöschmethode verwenden.

【Verwandte Empfehlung: MySQL-Video-Tutorial

Das obige ist der detaillierte Inhalt vonEine kurze Analyse der MySQL-Löschmethoden: der Unterschied zwischen Löschen, Abschneiden und Löschen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.cn. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen