Solte várias tabelas de uma vez no mysql

102

Como eliminar várias tabelas de um único banco de dados em um comando. algo como,

> use test; 
> drop table a,b,c;

onde a, b, c são as tabelas do teste de banco de dados.

Krunal
fonte
17
você já responde a si mesmo
ajreal
de acordo com as respostas abaixo, no HeidiSQL você pode filtrar tabelas por seus nomes (caixa de texto superior), escrever DROP TABLE em uma consulta e clicar duas vezes em cada tabela desejada para anexar seu nome à consulta (coloque uma vírgula entre elas) e então pressione F9 para executar. Um pouco fora do assunto, mas vim aqui para isso.
Ivan Ferrer Villa
Para pessoas que desejam eliminar várias tabelas com o mesmo prefixo, já DROP TABLE table_prefix_*que não funciona com o caractere estrela: stackoverflow.com/questions/6758652/…
baptx

Respostas:

135

Exemplo:

Digamos que a tabela A tenha dois filhos B e C. Então, podemos usar a seguinte sintaxe para eliminar todas as tabelas.

DROP TABLE IF EXISTS B,C,A;

Isso pode ser colocado no início do script em vez de descartar cada tabela individualmente.

Leniel Maccaferri
fonte
29
Talvez valha a pena destacar que as mesas não precisam ter relação alguma. Eles podem ser completamente independentes e essa sintaxe ainda funcionará.
crmpicco de
76
SET foreign_key_checks = 0;
DROP TABLE IF EXISTS a,b,c;
SET foreign_key_checks = 1;

Então você não precisa se preocupar em descartá-los na ordem correta, nem se eles realmente existem.

NB, isso é apenas para MySQL (como na pergunta). Outros bancos de dados provavelmente têm métodos diferentes para fazer isso.

OrangeDog
fonte
3
Você me salvou de muitos problemas girando as verificações de fkey (y).
HungryCoder
0

Uma maneira preguiçosa de fazer isso se houver muitas tabelas a serem excluídas.

  1. Obtenha a tabela usando o abaixo

    • Para sql server - SELECT CONCAT (nome, ',') Table_Name FROM SYS.tables;
    • Para oralce - SELECT CONCAT (TABLE_NAME, ',') FROM SYS.ALL_TABLES;
  2. Copie e cole os nomes das tabelas do conjunto de resultados e cole-os após o comando DROP.

Javaughn Jackson
fonte
-3
declare @sql1 nvarchar(max) 
SELECT @sql1 =
  STUFF(
         (
           select ' drop table dbo.[' + name + ']'

           FROM sys.sysobjects AS sobjects
           WHERE (xtype = 'U') AND (name LIKE 'GROUP_BASE_NEW_WORK_%')
           for xml path('')
        ),
     1, 1, '')

  execute sp_executesql @sql1
user4774666
fonte