Wie lege ich alle leeren Tabellen aus einer MySQL-Datenbank ab?

8

Wie lege ich alle leeren Tabellen aus einer MySQL-Datenbank ab und lasse nur die Tabellen übrig, die mindestens einen Datensatz haben?

    
F. Malina 18.10.2009, 12:47
quelle

8 Antworten

0

Ich bin mit gespeicherten Prozeduren nicht vertraut. Deshalb habe ich mich entschieden, sie zu meiden. Am Ende habe ich es mit Python mit MySQLdb gemacht, PHP wäre sehr ähnlich:

%Vor%     
F. Malina 24.08.2010, 11:26
quelle
3

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.

InnoDB-Hinweis

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: Ссылка

    
Ionuț G. Stan 18.10.2009 13:18
quelle
3

Verwenden Sie pt-find von Percona Toolkit:

%Vor%     
Bill Karwin 04.02.2012 21:21
quelle
2

Und eine PHP-Version für die Vollständigkeit. Es wird nichts fallen lassen, drucken Sie einfach die DROP-Anweisungen für Sie aus:

%Vor%     
F. Malina 24.08.2010 12:23
quelle
1
  • Wenn "leer" Einträge mit "" IF (SELECT * FROM tablexy) DROP TABLE tablexy bedeutet
  • Wenn "leer" bedeutet keinen Eintrag 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;)

    
Julius F 18.10.2009 12:55
quelle
1

Hier ist eine modifizierte Version des PHP-Skripts, die vorher gepostet wurde,
Ich habe eine Funktion hinzugefügt, die alle Datenbanken durchläuft (und als das ursprüngliche Skript mysql_query () auskommentieren, wenn Sie das Skript für real ausführen wollen)

%Vor%     
DomeDan 19.12.2011 22:50
quelle
1

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%     
AskApache Webmaster 04.02.2012 12:32
quelle
0

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.

    
Eat Ong 05.09.2012 08:34
quelle

Tags und Links