Gibt es einen MySQL-Befehl so etwas wie „Drop Tabellen außer t1, b2“ zu implementieren?
Frage
Ich möchte T1, T2 halten und alle anderen Tabellen löschen.
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