Ich hatte heute das Bedürfnis, alle Tabellen in MySQL zu löschen. Der Produktionsserver verfügt nicht über phpMyAdmin, mein Lieblingswerkzeug in meiner Entwicklungsumgebung zur Verwaltung von MySQL-Datenbanken. Ich war also auf die MySQL-Konsole angewiesen und brauchte eine einfache Lösung für diese Aufgabe.
Wie ich immer sage: „Google it“.
Ich fand ein elegantes Skript auf SOW. In diesem Artikel werde ich Zeile für Zeile beschreiben, was es tut.
SET FOREIGN_KEY_CHECKS = 0;
Diese Zeile deaktiviert die Fremdschlüssel-Beschränkungen. Wenn zwei Tabellen miteinander verbunden sind, können Sie keine der beiden Tabellen löschen. Die Fremdschlüssel-Beschränkung lässt dies nicht zu.
SET GROUP_CONCAT_MAX_LEN=32768;
Diese Zeile legt die maximale Länge der CONCAT-Funktion fest. In den folgenden Zeilen des Skripts werden Sie eine Verkettung sehen. In einigen MySQL-Konfigurationen kann dieser Wert zu niedrig sein. Um also mögliche Fehler zu vermeiden, stellen wir ihn groß genug ein.
SET @tables = NULL;
Dies ist die Variable, in der wir die Namen der Tabellen speichern.
SELECT GROUP_CONCAT('`', table_name, '`') INTO @tables FROM information_schema.tables WHERE table_schema = (SELECT DATABASE());
Erinnern Sie sich daran, dass Ihr gesamtes mysql-Schema in der Datenbank information_schema gespeichert ist. SELECT DATABASE() wird verwendet, um die aktuell verwendete Datenbank zu ermitteln. Diese Zeile wählt die Liste der Tabellen in der aktuellen Datenbank aus und schmückt sie mit dem (`)-Zeichen, und das Endergebnis wird in der Variablen tables wie folgt gespeichert: `table_1`, `table_2`, …, `table_n`.
SELECT IFNULL(@tables,'dummy') INTO @tables;
Diese Zeile setzt „dummy“ in die Variable tables, wenn die Variable NULL ist. Diese Zeile stellt sicher, dass die Variable tables niemals NULL ist.
SET @tables = CONCAT('DROP TABLE IF EXISTS ', @tables);
Diese Zeile fügt „DROP TABLE IF EXISTS“ vor die Variable tables. Das Endergebnis ist also DROP TABLE IF EXISTS `table_1`, `table_2`, …, `table_n`.
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Diese drei Zeilen müssen nicht getrennt werden. Diese Zeilen führen den SQL-Satz in den Tabellenvariablen aus.
SET FOREIGN_KEY_CHECKS = 1;
Schließlich aktiviert diese Zeile die Option zur Überprüfung der Fremdschlüsselbegrenzung.
Dieses kleine Skript hat mir wirklich gut gefallen. Es ist wirklich praktisch. Ich hoffe, es hilft Ihnen, besser zu verstehen, wie es funktioniert.