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.


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.


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.


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.


-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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.