Unterschied zwischen DELETE, TRUNCATE und DROP

In diesem Beitrag möchte die Unterschiede der drei Befehle DELETE, TRUNCATE und DROP beschreiben. Im allgemeinen kann man sagen, dass mit Hilfe dieser Befehle die Daten gelöscht werden können.

Was ist also der Unterschied und wann soll welcher Befehl verwendet werden?

DELETE

  • Es werden nur bestimmte oder alle Datensätze aus einer Tabelle entfernt
  • Durch die WHERE Bedienung, können die zu löschende Datensätze bestimmt werden.
  • Führt dazu, dass ON DELETE Trigger ausgeführt werden
  • Löscht Datensätze Zeile für Zeile und ist somit langsamer als TRUNCATE
  • Gibt den gelöschten Speicher nicht frei. Der Speicher wird für Spätere INSERT’s oder UPDATE’s verwendet
  • Es wird UNDO Tablespace verwendet
  • Daten könne gelöscht werden auch wenn FK aktiv sind, sofern die Daten keine FK Einschränkung verletzen
  • DELETE kann aus einem anderen Schema aufgerufen werden, soweit das aktuelle Schema die Grants dazu hat
  • DELETE ist ein DML-Befehl und benötigt somit ein Commit am Ende der Transaktion
  • Vor einem Commit können Daten mit Rollback wiederhergestellt werden

TRUNCATE

  • Es werden alle Datensätze aus einer Tabelle entfernt
  • Hier kann keine WHERE Bedienung verwendet werden.
  • ID Spalten werden wieder neu vorne vergeben
  • Trigger werden bei dieser Aktion nicht ausgeführt
  • Keine Verwendung von UNDO Tablespace
  • Daten können nicht gelöscht werden wenn FK aktiv sind. FK müssen vor der Transaktion deaktiviert oder gedroppt werden. Ausnahme: Auf sich selbst verweisende FK
  • TRUNCATE kann nicht aus einem anderen Schema aufgerufen werden
  • TRUNCATE ist ein DDL-Befehl und benötigt kein Commit am Ende der Transaktion
  • Nach TRUNCATE können Daten nicht mehr wiederhergestellt werden. Ein mal gelöscht, sind die Daten für immer weg.*

* Daten können auch hier wiederhergestellt werden, dafür muss man jedoch ein DB Backup wiederhergestellt werden.

DROP

  • Es werden alle Datensätze aus einer Tabelle entfernt. Die Tabellendefinition selbst mit den Triggern, Indizes, Grants wir dabei aus der Datenbank mitgelöscht.
  • Hier kann keine WHERE Bedienung verwendet werden.
  • Trigger werden bei dieser Aktion nicht ausgeführt
  • Keine Verwendung von UNDO Tablespace
  • Eine gelöschte Tabelle kann aus „dem Papierkorb“ (mehr dazu in einem späteren Artikel) wiederhergestellt werden
  • Die Tabelle kann gelöscht werden mit der Option CASCADE CONSTRAINTS. Damit werden die dazugehörigen FK’s entfernt.
  • DROP kann nicht aus einem anderen Schema aufgerufen werden
  • DROP ist ein DDL-Befehl und benötigt kein Commit am Ende der Transaktion
  • Nach DROP können Daten nicht mehr wiederhergestellt werden. Ein mal gelöscht, sind die Daten für immer weg.

Und zum Schluss noch ein Paar Links zum Nachlesen in der Oracle Dokumentation.

Kommentar verfassen