Diese gespeicherte Prozedur sollte es tun:
%Vor% Es kann Probleme mit dieser GROUP_CONCAT
geben, wenn zu viele leere Tabellen vorhanden sind. Dies hängt vom Wert der Systemvariablen group_concat_max_len
ab .
Es ist nicht möglich, dies in einer Abfrage zu tun, weil DROP TABLE
seine Argumente nicht von einer SELECT
-Abfrage erhalten kann.
Danke an James für seine Kommentare. Es scheint, dass die Abfrage der Zeilenanzahl im Fall von InnoDB -Tabellen keine präzisen Ergebnisse liefert, so dass die obige Prozedur nicht garantiert perfekt funktioniert, wenn InnoDB -Tabellen in diesem Schema vorhanden sind.
Für InnoDB-Tabellen ist die Zeilenanzahl nur eine grobe Schätzung in SQL verwendet Optimierung. (Dies gilt auch, wenn Die InnoDB-Tabelle ist partitioniert.)
Quelle: Ссылка
IF (SELECT * FROM tablexy) DROP TABLE tablexy
bedeutet
IF (SELECT * FROM tablexy) DROP TABLE tablexy
(Sie müssen diese Abfragen für jede Tabelle ausführen, weil ich keine Möglichkeit gefunden habe, eine Abfrage für alle Tabellen in einer Abfrage auszuführen)
Es ist dieselbe Abfrage, aber ich möchte von NICHTS und ETWAS OHNE INHALT abweichen;)
Wenn Sie direkt aus der Shell verwendet werden, ersetzen Sie db durch datenbankname. Beachten Sie, dass dies live ist und keine Auskommentierung erforderlich ist.
%Vor%Ein anderer Weg, PHP zu benutzen, ist:
%Vor%Dies entfernt eine andere Ausführung, nur um festzustellen, dass die Tabelle keine Zeilen enthält.
Ich bekomme Probleme mit der GROUP_CONCAT
mit der gespeicherten Prozedur. Was merkwürdig ist, ist, dass einige Tabellen nicht erkannt werden, dass sie nicht gefunden werden, scheint es.
Tags und Links mysql