C'è un comando MySQL per implementare qualcosa di simile a “tavoli goccia tranne t1, B2”?
Domanda
Voglio continuare a T1, T2 e rilasciare tutte le altre tabelle.
Soluzione
È possibile utilizzare information_schema
per trovare i nomi di tabella, e anche formattare i risultati come un mucchio di dichiarazioni DROP
.
SELECT CONCAT('DROP TABLE ', TABLE_NAME, '; ')
FROM information_schema.tables
WHERE table_schema = DATABASE() AND table_name NOT IN ('foo', 'bar', 'baz');
(La funzione DATABASE()
restituisce il database attualmente use
'd.)
Utilizzando PREPARE
e EXECUTE
, si potrebbe anche evitare di copia & incolla, e (in MySQL 5.0.13 e successivi) scrivere una stored procedure per fare questo.
Altri suggerimenti
Si potrebbe utilizzare mysqldump per generare un elenco di istruzioni DROP TABLE, filtrare quelli che non si desidera, poi il tubo di nuovo nel client mysql. Ecco come costruiamo che fino
Per prima cosa, ecco una lista di dichiarazioni Drop Table tavolo per il database
mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP
Ora possiamo tubo che attraverso grep con -v per invertire la partita - vogliamo dichiarazioni che non menzionano le tabelle stiamo ritegno (un altro modo per fare questo sarebbe --ignore-tavolo le opzioni per mysqldump)
mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP |
grep -v 'foo\|bar'
Infine, una volta che siete sicuri, è possibile reindirizzare che torna in MySQL
mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP | \
grep -v 'foo\|bar' | \
mysql -uUSERNAME -pPASSWORD DATABASE