Como descartar todas as tabelas em um banco de dados MySQL sem descartar o banco de dados?

12

Preciso largar todas as tabelas em um banco de dados sem saber seus nomes de antemão. O procedimento típico é eliminar e recriar o banco de dados, mas isso não é uma opção. Qual é a melhor maneira de fazer isso?

    
por Angel Chiang 06.11.2009 / 14:19

5 respostas

18

Existe um one-liner bash mais simples usando mysqldump (de Thingy Ma Jig Blog ).

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

Se você está recebendo este erro:

ERROR 1217 (23000) at line 1: Cannot delete or update a parent row: 
    a foreign key constraint fails

Tente o seguinte:

(echo 'SET foreign_key_checks = 0;'; 
 (mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE] | 
     grep ^DROP); 
 echo 'SET foreign_key_checks = 1;') | \
    mysql -u[USERNAME] -p[PASSWORD] -b [DATABASE]

Agora, ignora as restrições.

    
por 26.03.2011 / 22:03
5

Você deve usar as tabelas information_schema para buscar os metadados sobre o banco de dados e, em seguida, solte as tabelas listadas aqui.

    
por 06.11.2009 / 14:37
3

Você pode tentar um script de shell rápido para fazer isso também:

#!/bin/bash

IFS=$'\n'
for table in 'mysql <databaseName> -N -e 'show tables''; do
    echo mysql <databaseName> -e "drop table $table"
done

Remova echo depois de verificar se ele fará o que você espera.

    
por 06.11.2009 / 14:53
0

Houve uma entrada no blog Xaprb recentemente, que cobre isso muito bem.

Inclui porque usar INFORMATION_SCHEMA nem sempre é uma coisa boa e faz referência a uma ferramenta dessas pessoas adoráveis em Maatkit .

Tente o seguinte com mk-find :

mk-find '<database>' --printf 'DROP TABLE %D.%N'

Se você está feliz com os resultados, então:

mk-find '<database>' --exec 'DROP TABLE %D.%N'
    
por 06.11.2009 / 14:46
-2

Se você tiver acesso ao sistema de arquivos, apenas rm -rf databasename/* :).

A instrução do banco de dados de recebimento faz o mesmo ... Excerto do manual do MySQL:

A instrução DROP DATABASE remove do diretório do banco de dados os arquivos e diretórios que o próprio MySQL pode criar durante a operação normal:

    
por 05.01.2012 / 15:33