Alle Tabellen einer Datenbank mit einer SQL-Abfrage (Query) löschen

Möglicherweise ist ein DROP der Datenbank keine Option und Sie wollen nur alle Tabellen löschen. Hier finden Sie Möglichkeiten für Oracle und MySQL.

Wie kann ich alle Tabellen mir nur einer SQL-Query löschen?

Zunächst einmal könnte man sich die Frage stellen, ob es nicht einfacher wäre, die SQL-Datenbank komplett zu löschen und dann wieder anzulegen. Das klingt plausibel, hat aber möglicherweise Nachteile. Eventuell verlieren Sie dadurch die Benutzer-Berechtigungen. Außerdem könnte es sein, dass der Benutzer zwar Tabellen löschen und erstellen kann, aber keine Berechtigung für das Löschen einer SQL-Datenbank hat.

Es gibt leider keinen Befehl DROP ALL TABLES. Somit können Sie das nicht mithilfe eines einzigen SQL-Ausdrucks realisieren. Am einfachsten ist es, die „DROP TABLE“-Befehle fließend oder in Echtzeit (on the fly) zu erstellen. Das könnte wie folgt aussehen:

SPOOL drop_tables.sql
SELECT 'DROP TABLE '||table_name||';' FROM user_tables;
SPOOL OFF
@drop_tables

Das Script drop_tables.sql wird dynamisch für alle Tabellen in Ihrem Schema erschaffen.

MySQL hat etwas Ähnliches wie SPOOL für Oracle. Es nennt sich tee und notee.

Bei MySQL könnten Sie für eine äquivalente Lösch-Aktion nachfolgenden Befehl ausführen:

SELECT concat('DROP TABLE IF EXISTS ', table_name, ';') FROM information_schema.tables WHERE
table_schema = 'Mein Datenbank Name';

Sollten Fremdschlüssel (Foreign Key) ein Problem sein, lassen sich diese mit

SET FOREIGN_KEY_CHECKS = 0

deaktivieren. Ersetzen Sie die 0 mit einer 1, sind sie wieder aktiv.

Da MySQL häufig auf Linux-Servern Einsatz findet, führen hier viele Wege nach Rom. Im Prinzip können Sie maßgeschneiderte Script-Lösungen via Konsole schreiben und danach auf die Datenbank loslassen.

Erfahren Sie mehr über Datenbanken

ComputerWeekly.de
Close