Gibt es einen MySQL-Befehl so etwas wie „Drop Tabellen außer t1, b2“ zu implementieren?

StackOverflow https://stackoverflow.com/questions/1454328

  •  12-09-2019
  •  | 
  •  

Frage

Ich möchte T1, T2 halten und alle anderen Tabellen löschen.

War es hilfreich?

Lösung

Sie können information_schema verwenden Tabellennamen zu finden, und auch die Ergebnisse formatiert als ein Bündel von DROP Aussagen.

SELECT CONCAT('DROP TABLE ', TABLE_NAME, '; ')
  FROM information_schema.tables
  WHERE table_schema = DATABASE() AND table_name NOT IN ('foo', 'bar', 'baz');

(Die DATABASE() Funktion gibt die aktuell use'd Datenbank.)

Mit PREPARE und EXECUTE, könnten Sie sogar vermeiden Copy & Paste und (in MySQL 5.0.13 und höher) schreibt eine gespeicherte Prozedur, dies zu tun.

Andere Tipps

Sie könnten mysqldump verwenden, um eine Liste der DROP TABLE-Anweisungen zu erzeugen, diejenigen herauszufiltern, die Sie nicht wollen, dann Rohr wieder in den MySQL-Client. Hier ist, wie wir aufbauen

Als erstes ist hier eine Liste der DROP TABLE Tabelle Anweisungen für die Datenbank

mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP 

Jetzt können wir Rohr, das durch grep mit -v, das Spiel zu invertieren - wir Aussagen wollen, die nicht erwähnt werden die Tabellen wir beibehalten (eine andere Art und Weise, dies zu tun wäre --ignore-Tabelle Optionen für mysqldump)

mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP |  
grep -v 'foo\|bar'

Schließlich, wenn Sie sicher sind, können Sie Rohr, das in mysql zurück

mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP | \ 
grep -v 'foo\|bar' | \
mysql -uUSERNAME -pPASSWORD DATABASE
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top