Como remover todas as tabelas do MySQL da linha de comando sem permissions de database DROP?

Como faço para soltar todas as tabelas no Windows MySQL, usando o prompt de comando? A razão pela qual eu quero fazer isso é que o nosso usuário tem access ao database, mas não há access para recriar o próprio database, por isso, devemos descartar as tabelas manualmente. Existe uma maneira de soltar todas as tabelas de uma só vez? Tenha em mente que a maioria das tabelas está vinculada a foreign keys, portanto, elas precisam ser descartadas em uma ordem específica.

Você pode gerar uma instrução como esta: DROP TABLE t1, t2, t3, ... e depois usar instruções preparadas para executá-lo:

 SET FOREIGN_KEY_CHECKS = 0; SET @tables = NULL; SELECT GROUP_CONCAT(table_schema, '.', table_name) INTO @tables FROM information_schema.tables WHERE table_schema = 'database_name'; -- specify DB name here. SET @tables = CONCAT('DROP TABLE ', @tables); PREPARE stmt FROM @tables; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET FOREIGN_KEY_CHECKS = 1; 

A versão do @ Devart está correta, mas aqui estão algumas melhorias para evitar erros. Eu editei a resposta do @ Devart, mas não foi aceita.

 SET FOREIGN_KEY_CHECKS = 0; SET GROUP_CONCAT_MAX_LEN=32768; SET @tables = NULL; SELECT GROUP_CONCAT('`', table_name, '`') INTO @tables FROM information_schema.tables WHERE table_schema = (SELECT DATABASE()); SELECT IFNULL(@tables,'dummy') INTO @tables; SET @tables = CONCAT('DROP TABLE IF EXISTS ', @tables); PREPARE stmt FROM @tables; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET FOREIGN_KEY_CHECKS = 1; 

Este script não gerará erro com resultado NULL caso você já tenha excluído todas as tabelas no database, adicionando pelo menos uma tabela inexistente – “dummy”.

E corrigido no caso de você ter muitas tabelas.

E esta pequena mudança para deixar cair toda a opinião existe no database

 SET FOREIGN_KEY_CHECKS = 0; SET GROUP_CONCAT_MAX_LEN=32768; SET @views = NULL; SELECT GROUP_CONCAT('`', TABLE_NAME, '`') INTO @views FROM information_schema.views WHERE table_schema = (SELECT DATABASE()); SELECT IFNULL(@views,'dummy') INTO @views; SET @views = CONCAT('DROP VIEW IF EXISTS ', @views); PREPARE stmt FROM @views; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET FOREIGN_KEY_CHECKS = 1; 

Ele pressupõe que você execute o script do database que deseja excluir. Ou execute isso antes:

 USE REPLACE_WITH_DATABASE_NAME_YOU_WANT_TO_DELETE; 

Obrigado a Steve Horvath para descobrir o problema com backticks.

Tente isso.

Isso funciona mesmo para tabelas com restrições (relações de chave estrangeira). Como alternativa, você pode simplesmente descartar o database e recriar, mas talvez não tenha as permissions necessárias para fazer isso.

 mysqldump -u[USERNAME] -p[PASSWORD] \ --add-drop-table --no-data [DATABASE] | \ grep -e '^DROP \| FOREIGN_KEY_CHECKS' | \ mysql -u[USERNAME] -p[PASSWORD] [DATABASE] 

Para superar os efeitos de verificação de chave estrangeira, inclua show table no final do script gerado e execute várias vezes até que o comando show table resulte em um conjunto vazio.

Você pode descartar o database e, em seguida, recriá- lo com o seguinte: –

 mysql> drop database [database name]; mysql> create database [database name]; 

A resposta aceita não funciona para bancos de dados que possuem um grande número de tabelas, por exemplo, bancos de dados Drupal. Em vez disso, consulte o script aqui: https://stackoverflow.com/a/12917793/1507877, que funciona no MySQL 5.5. CUIDADO: Em torno da linha 11, há um “WHERE table_schema = SCHEMA ();” Em vez disso, deve ser “WHERE table_schema = ‘INSERIR NOME DO BD EM QUE IMPORTAR OCORRERÁ’;”