Wie kann ich löschen Sie alle leeren Tabellen aus einer MySQL-Datenbank?
Wie kann ich löschen Sie alle leeren Tabellen aus einer MySQL-Datenbank, so dass nur die Tabellen, die mindestens 1 Datensatz?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser gespeicherten Prozedur sollten es tun:
Kann es Probleme mit
GROUP_CONCAT
wenn es zu viele leere Tische. Es hängt vom Wert dergroup_concat_max_len
system variable.Es ist nicht möglich, es zu tun in einer Abfrage, da
DROP TABLE
nicht empfangen kann, seine Argumente aus einerSELECT
Abfrage.InnoDB Hinweis
Dank James für seine Kommentare. Es scheint, dass die Zeilenanzahl Abfrage nicht zurückkehren, präzise Ergebnisse im Fall von InnoDB-Tabellen, der obige Verfahren ist nicht garantiert, um perfekt funktionieren, wenn es InnoDB-Tabellen in diesem schema.
Quelle: http://dev.mysql.com/doc/refman/5.1/en/tables-table.html
table_rows
Feld ist nur null, wenn die Tabelle leer ist? (Ich würde denken, das wäre eines der wenigen Male, wo dietable_rows
für eine InnoDB-Tabelle wäre richtig, aber ich weiß eigentlich nicht).Verwenden pt-finden von Percona Toolkit:
Und eine PHP-version für Vollständigkeit. Es wird nicht drop, nichts, nur für Sie drucken die DROP-Anweisungen:
IF (SELECT * FROM tablexy) DROP TABLE tablexy
IF (SELECT * FROM tablexy) DROP TABLE tablexy
(Sie haben zur Ausführung dieser Abfragen für jede Tabelle, weil ich nicht einen Weg gefunden, führen Sie eine Abfrage über alle Tabellen in einer Abfrage)
Es ist die gleiche Abfrage, aber ich möchte unterscheiden sich von NICHTS und ETWAS OHNE INHALT 😉
Hier ist eine modifizierte version des php-Skript weiter oben geschrieben,
Ich fügte hinzu, eine Funktion, die eine Schleife durch alle Datenbanken (und wie das original-Skript, kommentieren Sie mysql_query (), wenn Sie wollen, um das Skript auszuführen für real)
Wenn direkt von der shell ersetzt db mit Eintrag database_name ein. Hinweis: dies ist eine live, keine einkommentieren benötigt.
Ich bin nicht vertraut mit gespeicherten Prozeduren. Daher entschied ich mich, Sie zu vermeiden.
Am Ende habe ich es mit Python mit MySQLdb, PHP wäre sehr ähnlich:
Anderen Weg mit PHP ist:
Dies entfernt eine weitere Ausführung, nur um festzustellen, dass die Tabelle keine Zeilen enthält.
Bin ich immer Probleme mit der
GROUP_CONCAT
mithilfe der gespeicherten Prozedur. Was seltsam ist, dass einige Tabellen nicht erkannt werden, Sie sind es nicht gefunden scheint.