cherezoff - stock.adobe.com

Wie kann man alle Tabellen mit einer SQL-Abfrage löschen?

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

Zunächst einmal kann man sich die Frage stellen, ob es nicht einfacher ist, 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 kann 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 mit einer einzigen SQL-Abfrage realisieren. Am einfachsten ist es, die DROP TABLE-Befehle fließend oder on the fly zu erstellen. Das kann 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önnen Sie für eine vergleichbare Löschaktion 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 ein Problem sein, lassen sich diese mit

SET FOREIGN_KEY_CHECKS = 0

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

Da MySQL häufig auf Linux-Servern Einsatz findet, gibt es hier viele Optionen. Im Prinzip können Sie maßgeschneiderte Script-Lösungen via Konsole schreiben und danach auf der Datenbank ausführen.

Erfahren Sie mehr über Datenbanken