Der Unterschied zwischen Löschen, Abschneiden und Löschen und wie man wählt

Der Unterschied zwischen Löschen, Abschneiden und Löschen und wie man wählt

Vorwort

Letzte Woche fragte mich ein Kollege: „Bruder, ich habe einen Fehler in MySQL gefunden. Ich habe am Nachmittag 1 Million MySQL-Daten gelöscht, um die Festplatte zu bereinigen, aber die Festplatte wurde nicht nur nicht kleiner, sondern sogar noch voller?“

Also, wie haben Sie es gelöscht?

"aus Tabelle löschen"

„Kein Wunder. Tatsächlich gibt es mehrere Möglichkeiten, MySQL-Daten zu löschen. In manchen Fällen, wie in Ihrem Fall, sollte DELETE nicht verwendet werden. Okay, ich erkläre es Ihnen.“

Welche Möglichkeiten gibt es, Daten in MySQL zu löschen?

Wir verwenden üblicherweise drei Löschmethoden: Löschen mit den Schlüsselwörtern „delete“, „truncate“ und „drop“. Alle drei können zum Löschen von Daten verwendet werden, jedoch in unterschiedlichen Szenarien.

1. In Bezug auf die Ausführungsgeschwindigkeit

löschen > abschneiden >> LÖSCHEN

2. Grundsätzlich

1. LÖSCHEN

LÖSCHEN aus TABLE_NAME, wobei xxx

1. DELETE gehört zur Datenbank-DML-Operationssprache . Es löscht nur Daten, nicht aber die Tabellenstruktur. Es durchläuft Transaktionen und löst bei Ausführung einen Trigger aus.

2. In InnoDB löscht DELETE die Daten nicht wirklich. MySQL markiert die gelöschten Daten eigentlich nur als gelöscht. Wenn DELETE die Daten in der Tabelle löscht, wird daher der von der Tabellendatei auf der Festplatte belegte Speicherplatz nicht reduziert und der Speicherplatz wird nicht freigegeben. Es macht die gelöschten Datenzeilen lediglich unsichtbar. Obwohl der Speicherplatz dadurch nicht freigegeben wird, kann er beim nächsten Einfügen von Daten erneut verwendet werden (Wiederverwenden → Überschreiben).

3. Wenn DELETE ausgeführt wird, werden die gelöschten Daten zuerst im Rollback-Segment zwischengespeichert und werden nach dem Festschreiben der Transaktion wirksam.

4. delete from table_name löscht alle Daten in der Tabelle. Für MyISAM wird der Speicherplatz sofort freigegeben, InnoDB gibt jedoch keinen Speicherplatz frei.

5. Beim bedingten Löschen von „delete from table_name where xxx“ geben weder InnoDB noch MyISAM Speicherplatz frei.

6. Verwenden Sie die Optimieren-Tabelle table_name nach dem Löschvorgang, um sofort Speicherplatz freizugeben. Egal ob es InnoDB oder MyISAM ist. Um Speicherplatz freizugeben, führen Sie daher nach dem Löschen den Vorgang zur Tabellenoptimierung aus.

Beispiel: Die SQL-Anweisung zum Überprüfen des von einer Tabelle belegten Speicherplatzes lautet wie folgt: (Verwenden Sie M als Anzeigeeinheit, Datenbankname: csjdemo, Tabellenname: demo2)

Wählen Sie concat(round(sum(DATA_LENGTH/1024/1024),2),'M') als Tabellengröße 
 aus information_schema.tables 
 wobei table_schema='csjdemo' UND table_name='demo2'; 

Führen Sie dann die Anweisung zur Speicherplatzoptimierung aus. Nach der Ausführung ändert sich die Tabellengröße:

Tabelle optimieren demo2 

Wenn man die Größe dieser Tabelle betrachtet, bleibt nur die Größe der Tabellenstruktur übrig.

7. Der Löschvorgang wird zeilenweise ausgeführt, und das Löschvorgangsprotokoll der Zeile wird für Rollback- und Redo-Vorgänge in den Redo- und Undo-Tabellenbereichen aufgezeichnet . Die große Menge der generierten Protokolle belegt auch Speicherplatz .

2. abschneiden

Tabelle TABLE_NAME abschneiden

1. Abschneiden: Es gehört zur DDL-Definitionssprache der Datenbank , durchläuft keine Transaktionen, die Originaldaten werden nicht in das Rollback-Segment eingefügt und der Vorgang löst keinen Trigger aus.

Es wird sofort nach der Ausführung wirksam und kann nicht abgerufen werden. Es wird sofort nach der Ausführung wirksam und kann nicht abgerufen werden.

2. Durch Abschneiden der Tabelle table_name wird sofort Speicherplatz freigegeben, unabhängig von InnoDB oder MyISAM . „Truncate Table“ ähnelt eigentlich ein wenig „Drop Table and Then Create“, mit dem Unterschied, dass der Vorgang zum Erstellen der Tabelle optimiert wurde, z. B. ist die Tabellenstrukturdatei bereits vorhanden. Die Geschwindigkeit sollte also nahe an der des Drop-Table liegen.

3. Mit Truncate kann eine Tabelle schnell geleert werden. Und setzen Sie den Wert von auto_increment zurück.

Bei den unterschiedlichen Typen von Speicher-Engines müssen Sie jedoch Folgendes beachten:

  • Für MyISAM setzt truncate den auto_increment-Wert auf 1 zurück. Nach dem Löschen behält die Tabelle weiterhin die Funktion „auto_increment“ bei.
  • Für InnoDB setzt truncate den auto_increment-Wert auf 1 zurück. Nach dem Löschen behält die Tabelle weiterhin die automatische Inkrementierung bei. Wenn Sie MySQL jedoch nach dem Löschen der gesamten Tabelle neu starten, wird auto_increment nach dem Neustart auf 1 gesetzt.

Mit anderen Worten: Die InnoDB-Tabelle selbst kann auto_increment nicht beibehalten. Nach dem Löschen der Tabelle ist auto_increment zwar noch im Speicher gespeichert, geht aber nach dem Neustart verloren und kann nur bei 1 beginnen. Tatsächlich beginnt die automatische Inkrementierung nach dem Neustart mit „SELECT 1+MAX(ai_col) FROM t“.

4. Seien Sie vorsichtig, wenn Sie Truncate verwenden, insbesondere wenn kein Backup vorhanden ist. Wenn Sie versehentlich eine Online-Tabelle löschen, denken Sie daran, sich rechtzeitig an China Civil Aviation zu wenden. Telefonnummer für Ticketbuchungen: 400-806-9553

3. Tropfen

Tabelle löschen Tabellenname

1. Drop: gehört zur Datenbank-DDL-Definitionssprache, dasselbe wie Truncate;

Es wird sofort nach der Ausführung wirksam und kann nicht abgerufen werden. Es wird sofort nach der Ausführung wirksam und kann nicht abgerufen werden.

2. Durch das Löschen der Tabelle „table_name“ wird sofort Speicherplatz freigegeben, unabhängig davon, ob es sich um InnoDB oder MyISAM handelt. Die Drop-Anweisung löscht die Einschränkungen, Trigger und Indizes, von denen die Tabellenstruktur abhängt. Die gespeicherten Prozeduren/Funktionen, die von der Tabelle abhängen, bleiben erhalten, werden jedoch ungültig.

3. Vorsicht bei der Nutzung von Drop. Wenn du das Formular löschen und weglaufen möchtest, führe den Vorgang bitte erst nach erfolgreicher Ticketbuchung aus! Ticketbuchungshotline: 400-806-9553

Sie können es sich so vorstellen: Bei einem Buch bedeutet Löschen, das Inhaltsverzeichnis herauszureißen, Truncate bedeutet, den Inhalt des Buches herauszureißen und zu verbrennen und Drop bedeutet, das Buch zu verbrennen.

Zusammenfassen

Dies ist das Ende dieses Artikels über die Unterschiede zwischen Löschen, Abschneiden und Löschen und wie man diese auswählt. Weitere Informationen zu den Unterschieden und Auswahlmöglichkeiten zwischen Löschen, Abschneiden und Löschen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder stöbern Sie weiter in den verwandten Artikeln unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung des Unterschieds zwischen DROP, TRUNCATE und DELETE in MySQL. Implementierung von MySQL von Grund auf
  • Verwendung von Drop-, Truncate- und Delete-Anweisungen in SQL Server
  • Der Unterschied zwischen Drop, Truncate und Delete
  • Vergleich der Ähnlichkeiten und Unterschiede zwischen Drop-, Delete- und Truncate-Anweisungen in der Datenbank (mit Beispielen)
  • Detaillierte Erklärung der Ähnlichkeiten und Unterschiede zwischen Drop, Delete und Truncate in SQL
  • Eine kurze Analyse verschiedener Methoden zum Löschen von Tabellen (Löschen, Löschen, Abschneiden)
  • Implementierung der MySQL-Tabellenlöschoperation (Unterschiede zwischen Löschen, Abschneiden und Löschen)
  • Verstehen Sie den Unterschied zwischen Drop, Truncate und Delete in Sekunden
  • Unterschiede zwischen den SQL-Löschanweisungen DROP, TRUNCATE und DELETE
  • Möglicherweise wissen Sie nicht einmal, wie Sie eine Datenbank löschen und weglaufen (Löschen, Löschen und Abschneiden, um Daten zu löschen).

<<:  Lösung für das Timeout-Problem der SNMP4J-Serververbindung

>>:  UDP DUP-Timeout UPD-Portstatus-Erkennungscodebeispiel

Artikel empfehlen

Hinweise zum Upgrade auf mysql-connector-java8.0.27

Kürzlich wurde bei einem Online-Sicherheitsscan e...

Implementierung des Aufbaus eines Kubernetes-Clusters mit VirtualBox+Ubuntu16

Inhaltsverzeichnis Über Kubernetes Grundlegende U...

MySQL-Grundlagen - Kurzanleitung - Wissenszusammenfassung (mit Mindmap)

Inhaltsverzeichnis Vorwort 1. Grundkenntnisse der...

Demo für 10-Farbverlaufshintergrund des CSS-Containers (linear-gradient())

Grammatik Hintergrund: linearer Farbverlauf (Rich...

So schreiben Sie den Einführungsinhalt der Infoseite der Website

Alle Websites, ob offiziell, E-Commerce, soziale ...

Implementierung von Portalen und Fehlergrenzbehandlung in React

Inhaltsverzeichnis Portale Fehlergrenzenbehandlun...

Bringen Sie Ihnen bei, wie Sie wartbaren JS-Code schreiben

Inhaltsverzeichnis Was ist wartbarer Code? Code-K...

Implementierung eines statischen Website-Layouts im Docker-Container

Serverplatzierung Es wird empfohlen, Cloud-Server...

Detaillierter Code zur Implementierung einer 3D-Tag-Cloud in Vue

Vorschau: Code: Seitenabschnitte: <Vorlage>...

Schritte zur Installation von Pyenv unter Deepin

Vorwort In der Vergangenheit habe ich die Python-...

Detailliertes Tutorial zum Ausführen von Selenium+Chromedriver auf dem Server

1. Einleitung Ich möchte Selenium verwenden, um D...

Verbesserung der Aktualisierungsfunktion für Zen-Codierungsressourcen

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