Você não pode fazer isso com apenas um único comando MySQL, no entanto, você pode usar o MySQL para construir a instrução para você:
No shell do MySQL ou por meio do PHPMyAdmin, use a seguinte consulta
SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' )
AS statement FROM information_schema.tables
WHERE table_name LIKE 'myprefix_%';
Isso irá gerar uma instrução DROP que você pode copiar e executar para eliminar as tabelas.
EDIT: Um aviso aqui - a instrução gerada acima irá eliminar todas as tabelas em todos os bancos de dados com esse prefixo. Se você quiser limitá-lo a um banco de dados específico, modifique a consulta para ter a seguinte aparência e substitua database_name por seu próprio database_name:
SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' )
AS statement FROM information_schema.tables
WHERE table_schema = 'database_name' AND table_name LIKE 'myprefix_%';
[...] LIKE 'myprefix\_%';
Algumas das respostas anteriores foram muito boas. Reuni suas ideias com algumas noções de outras respostas na web.
Eu precisava excluir todas as tabelas começando com 'temp_' Depois de algumas iterações, eu vim com este bloco de código:
Espero que isso seja útil para outros programadores de MySQL / PHP.
fonte
copie os resultados e cole-os em um editor de texto ou envie a consulta para um arquivo, use algumas pesquisas e substituições para remover a formatação indesejada e substituir
\n
por uma vírgula, coloque um;
no final e adicione a tabela suspensa à frente.você obterá algo parecido com isto:
fonte
A solução @andre-miller é boa, mas há ainda melhor e um pouco mais profissional que o ajudará a executar tudo de uma vez. Ainda precisará de mais de um comando, mas esta solução permitirá que você use o SQL para compilações automatizadas.
Nota: este código depende da plataforma, é para MySQL mas com certeza pode ser implementado para Postgre, Oracle e MS SQL com pequenas alterações.
fonte
fonte
Eu descarto a tabela com sucesso ao editar a consulta para gostar disso
fonte
Você pode fazer isso em um comando com MySQL:
Você provavelmente terá que construir a lista de tabelas dinamicamente no código.
Uma abordagem alternativa seria usar a biblioteca de rotina de propósito geral para MySQL 5.
fonte
Eu só queria postar o SQL exato que usei - é uma espécie de mistura das 3 principais respostas:
fonte
Apenas outra solução usando GROUP_CONCAT para executar uma consulta drop como
DROP TABLE table1, table2, ..
fonte
Descobri que as instruções preparadas eram um pouco complicadas de fazer funcionar para mim, mas definir o
GROUP_CONCAT_MAX_LEN
foi essencial quando você tem muitas tabelas. Isso resultou em um processo simples de três etapas com recortar e colar da linha de comando do mysql que funcionou muito bem para mim:Em seguida, recorte e cole cuidadosamente a declaração DROP longa resultante .
fonte
\G
vez de;
fornece uma saída um pouco mais limpa