Ich habe einen anderen Thread zu dieser Frage gefunden, aber ich war nicht in der Lage, seine Lösungen zu verwenden, also dachte ich, ich würde mit mehr Klarheit und Detail fragen.
Ich habe eine große MySQL-Datenbank, die ein vBulletin-Forum darstellt. Seit einigen Jahren wurde in diesem Forum ein Fehler bei jeder Ansicht erzeugt, wobei jedes Mal eine neue Tabelle namens aagregate_temp_1251634200
, aagregate_temp_1251734400
usw. erstellt wurde. Es gibt ungefähr 20.000 dieser Tabellen in der Datenbank, und ich möchte sie löschen alles.
Ich möchte einen Befehl ausgeben, der das Äquivalent von DROP TABLE WHERE TABLE_NAME LIKE 'aggregate_temp%';
sagt.
Leider funktioniert dieser Befehl nicht, und die Google-Ergebnisse für dieses Problem sind voll von aufwendigen gespeicherten Prozeduren, die über mein Verständnis hinausgehen und scheinbar alle auf die komplexeren Probleme verschiedener Poster zugeschnitten sind.
Ist es möglich, eine einfache Anweisung zu schreiben, die mehrere Tabellen basierend auf einer name like
Übereinstimmung löscht?
Es gibt keine einzige Anweisung, um das zu tun.
Der einfachste Ansatz besteht darin, eine Reihe von Anweisungen zu generieren und sie einzeln auszuführen.
Eine einfache Abfrage kann die Anweisungen für Sie generieren:
%Vor% Das gibt nur ein Rowset zurück, aber die Zeilen enthalten praktisch genau die SQL-Anweisungen, die Sie ausführen müssen. (Beachten Sie, dass information_schema
eine integrierte Datenbank ist, die Metadaten enthält. Sie müssen nur mydatabase
durch den Namen der Datenbank ersetzen, aus der Tabellen gelöscht werden sollen.
Speichern Sie das Resultset aus dieser Abfrage als reine Textdatei, entfernen Sie eine Überschriftenzeile und voila, Sie haben ein Skript, das Sie in Ihrem SQL-Client ausführen können.
Es gibt keine Notwendigkeit für eine aufwendige gespeicherte Prozedur.
Ein kleines Googeln fand das:
%Vor%Dies sollte ein Skript generieren.
Quelle : Löschen Sie alle Tabellen, deren Namen mit einer bestimmten Zeichenfolge beginnen
Aus dem Speicher müssen Sie vorbereitete Anweisungen verwenden, zum Beispiel: viele Samples im Stackaustausch
Ich würde dieses Beispiel empfehlen:
SQL: Löschen von Tabellen mit Präfix
Die obige SQL-Datei enthält den spezifischen Datenbanknamen - er erstellt ihn für Sie
%Vor%Hier ist ein anderer Weg, es zu tun:
Dies löscht alle Tabellen mit dem Präfix "mg_"
Das Kopieren und Einfügen von Rowsets ist nicht nötig und in phpadmin ist das Kopieren und Einfügen problematisch, da lange Tabellennamen abgeschnitten und durch "..." ruinierende SQL-Befehle ersetzt werden.
Beachten Sie auch, dass '_' ein Sonderzeichen ist, deshalb sollte 'mg_' als 'mg \ _'
codiert werden(und FOREIGN_KEY_CHECKS muss deaktiviert sein, um Fehlermeldungen zu vermeiden)
%Vor%