MySQL ist die weltweit beliebteste Open-Source-Datenbank, die für ihre Geschwindigkeit und Zuverlässigkeit bekannt ist. In diesem Artikel erfahren Sie, wie Sie alle Daten aus einer MySQL-Datenbanktabelle löschen und wie sich dies auf automatisch inkrementelle Felder auswirkt.
Löschen und Abschneiden
Es gibt zwei Möglichkeiten, alle Daten in einer MySQL-Datenbanktabelle zu löschen.
TRUNCATE TABLE tablename;
Dadurch werden alle Daten in der Tabelle sehr schnell gelöscht. In MySQL wird die Tabelle tatsächlich gelöscht und neu erstellt, daher die Geschwindigkeit der Abfrage. Die Anzahl der gelöschten Zeilen für zurückgegebene MyISAM-Tabellen ist Null.
DELETE FROM tablename;
Dies löscht auch alle Daten in der Tabelle, ist jedoch nicht so schnell wie die Methode „TABELLE ABSCHNEIDEN“. In MySQL >= 4.0 wird die Anzahl der gelöschten Zeilen zurückgegeben; in MySQL 3.23 ist die zurückgegebene Anzahl immer Null.
Spalten für MyISAM-Tabellen automatisch inkrementieren
Wenn Sie in Ihrer MyISAM-Tabelle eine Primärschlüsselspalte für die automatische Inkrementierung haben, unterscheidet sich das Ergebnis je nach verwendeter Löschmethode geringfügig. Bei Verwendung der Methode „TABELLE ABSCHNEIDEN“ wird der Startwert für das automatische Inkrement auf 1 zurückgesetzt. Wenn Sie die Methode „LÖSCHEN VON“ verwenden, wird der Startwert für das automatische Inkrement wie zuvor belassen (z. B. wenn das Feld für das automatische Inkrement des zuletzt eingefügten Datensatzes 123 war, wird der nächste eingefügte Datensatz auf 124 gesetzt).
Beachten Sie, dass dies für MySQL gilt >= 4.0; Aus meiner Lektüre der Handbuchseite TRUNCATE in MySQL 3.23 funktioniert TRUNCATE genau wie DELETE was bedeuten würde, dass der automatische Inkrement-Seed nicht zurückgesetzt wird. Ich habe derzeit keine 3.23-Datenbank eingerichtet, um sie zu testen, kann dies also nicht bestätigen.
Spalten für INNODB-Tabellen automatisch inkrementieren
Unabhängig davon, ob Sie für INNODB-Tabellen die Methoden „TABELLE ABSCHNEIDEN“ oder „LÖSCHEN AUS“ verwenden, wird das Feld für das automatische Inkrementieren nicht zurückgesetzt. Wenn Sie 5 Datensätze in eine neue Tabelle eingefügt, dann alle Datensätze gelöscht und einen weiteren Datensatz eingefügt haben, hat das Feld den Wert 6, unabhängig davon, welche Methode Sie verwendet haben.
Update 17 Feb 2009: Ich habe diesen Beitrag ursprünglich geschrieben, als MySQL 4.0 die aktuelle Version war. Ich habe das Obige jetzt gerade in einer INNODB-Tabelle mit MySQL 5.0 getestet und mit TRUNCATE wird das automatische Inkrementfeld auf den Standardwert zurückgesetzt. Entweder hat sich das Verhalten irgendwann geändert oder ich habe mich bei der obigen Aussage geirrt.
Sind Sie wirklich sicher, dass Sie alle Daten löschen möchten?
Bevor Sie alle Daten in einer Datenbank löschen, sollten Sie sicherstellen, dass Sie wirklich beabsichtigen, alle Daten zu löschen. Es lohnt sich oft zuerst „SELECT * FROM tablename“ oder „SELECT COUNT(*) FROM tablename“, bevor Sie dies tun, um zu überprüfen, ob es wirklich sicher ist, alle Daten zu löschen. Vielleicht möchten Sie wirklich etwas wie „DELETE FROM tablename WHERE foo = ‚bar'“ stattdessen tun.