C'è un comando MySQL per implementare qualcosa di simile a “tavoli goccia tranne t1, B2”?

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

  •  12-09-2019
  •  | 
  •  

Domanda

Voglio continuare a T1, T2 e rilasciare tutte le altre tabelle.

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top