TRUNCATE TABLE entfernt alle Zeilen einer Tabelle in einem Rutsch – und das deutlich schneller als ein DELETE ohne Bedingung. Dafür verzichtet es bewusst auf zeilenweise Kontrolle.
Wie es funktioniert
TRUNCATE TABLE protokoll;
Der Befehl arbeitet als Datenbank-Operation auf der gesamten Tabelle, nicht zeilenweise: In MySQL 8 wird intern ein DROP TABLE plus CREATE TABLE ausgeführt, weshalb kein einzelnes Löschen protokolliert wird. Ein WHERE gibt es nicht – entweder die Tabelle ist leer oder gar nicht.
Unterschied zu DELETE und DROP
- TRUNCATE vs. DELETE:
DELETElöscht zeilenweise, erlaubtWHERE, löst Trigger aus und lässt sich in Transaktionen zurückrollen.TRUNCATEist schneller, ignoriert Trigger und setzt in MySQL/MariaDB denAUTO_INCREMENT-Zähler zurück (Details zu DELETE: SQL DELETE). - TRUNCATE vs. DROP:
DROP TABLEentfernt die Tabelle mitsamt Struktur – sie muss danach neu angelegt werden.TRUNCATElässt die Struktur stehen, sodass direkt neue Zeilen eingefügt werden können (SQL DROP TABLE). - Fremdschlüssel: Verweisen andere Tabellen per Fremdschlüssel auf die Tabelle, verweigern viele Datenbanken das
TRUNCATE– MySQL meldet einen Fehler, PostgreSQL verlangtTRUNCATE ... CASCADE.
Rollback-Verhalten
In MySQL/MariaDB ist TRUNCATE ein DDL-artiger Befehl mit implizitem Commit – ein ROLLBACK kann die gelöschten Zeilen nicht zurückholen. PostgreSQL kann TRUNCATE innerhalb einer Transaktion zurücksetzen, wenn die Tabelle nicht durch Fremdschlüssel blockiert wird. Vor einem produktiven Einsatz gehört daher immer eine Sicherung oder ein Export her.
Typischer Einsatz: Log- oder Staging-Tabellen regelmäßig leeren, bevor neue INSERT-Läufe starten. Die Spaltenstruktur dafür legen Sie mit SQL CREATE TABLE an und wählen die passenden SQL Datentypen.
Verwandte Grundlagen: SQL Datentypen, SQL Temporäre Tabelle.