Existe um comando MySQL para implementar algo como “tabelas gota exceto t1, b2”?

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

  •  12-09-2019
  •  | 
  •  

Pergunta

Eu quero manter T1, T2 e soltar todas as outras tabelas.

Foi útil?

Solução

Você pode usar information_schema para encontrar nomes de tabela, e até mesmo formatar os resultados como um bando de declarações DROP.

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

(A função DATABASE() retorna o banco de dados atualmente use'd.)

Usando PREPARE e EXECUTE, você poderia até mesmo evitar copiar e colar, e (no MySQL 5.0.13 e posterior) escrever um procedimento armazenado para fazer isso.

Outras dicas

Você pode usar o mysqldump para gerar uma lista de declarações DROP TABLE, filtrar aqueles que você não quer, então canalizá-lo de volta para o cliente mysql. Aqui está como nós construir essa up

Em primeiro lugar, aqui está uma lista de DROP TABLE tabela para o banco de dados

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

Agora podemos tubulação que através grep com -v para inverter a partida - queremos afirmações que não mencionam as tabelas que está retendo (outra maneira de fazer isso seria opções --ignore-Table para mysqldump)

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

Finalmente, uma vez que você está confiante, você pode canalizar que volta para mysql

mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP | \ 
grep -v 'foo\|bar' | \
mysql -uUSERNAME -pPASSWORD DATABASE
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top