Como descartar todas as tabelas MySQL da linha de comando?

29

Normalmente abro o Terminal.app e conecto a um banco de dados MySQL remoto.

Então eu uso este comando para soltar uma tabela:

mysql> drop table [table name];

Mas o que eu preciso é a linha de comando para soltar todas as tabelas no banco de dados.

Se eu usar:

mysql> drop database [database name];

Destruirei o banco de dados completamente e não poderei criar tabelas novamente. Estou certo?

chefnelone
fonte

Respostas:

27

Você pode soltar o banco de dados e recriá-lo imediatamente:

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

Ou você pode usar um script para soltar cada tabela no banco de dados.

William Jackson
fonte
ok, só para ter certeza: eu me conecto ao banco de dados remoto no Terminal com esta linha: / Applications / MAMP / Library / bin / mysql -h 80.54.554.10 -u adm_user -p my_db . Depois de soltar e criar o banco de dados, como você disse, precisarei alterar os valores dessa conexão ou eles permanecerão os mesmos?
Chefnelone
1
@chef - Soltar todas as tabelas e soltar todo o banco de dados não tem o mesmo efeito. Se você soltar apenas as tabelas, quaisquer permissões de todo o banco de dados permanecerão, não se você soltar / recriar o banco de dados.
Nifle
10
@chefnelone: ​​Tenha cuidado !!! A eliminação de um banco de dados também remove procedimentos armazenados e visualizações definidas pelo usuário.
RolandoMySQLDBA
Quite clear for me. I'll go with the script to delete each table.
chefnelone
1
é totalmente inseguro, veja os comentários http://stackoverflow.com/a/12403742/1713660
vladkras
10

Você pode tentar o seguinte comando:

mysqldump --no-data --add-drop-table DB_NAME | grep ^DROP | mysql -v DB_NAME

Ou:

mysql --silent --skip-column-names -e "SHOW TABLES" DB_NAME | xargs -L1 -I% echo 'DROP TABLE `%`;' | mysql -v DB_NAME

Onde DB_NAMEestá o nome do seu banco de dados. Credenciais do banco de dados que você pode especificar ~/.my.cnfou adicioná-las ao comando (por exemplo -uroot -proot).

Este método tem algumas vantagens em relação à eliminação e criação do banco de dados, caso o usuário do banco de dados não tenha permissão para eliminá-lo.

kenorb
fonte
1
Segundo exemplo confirmado, incrível. Adicione credenciais de banco de dados como sinalizadores adicionais antes --silente -v/ --verboserespectivamente, como:--user=username --password=password --host=host.name
aqui
Boa ideia. Mas tenha algum problema quando houver CHAVE ESTRANGEIRA. Eu adiciono | sort -ra linha reversa, mas ainda não é compatível com alguns db.
Fancyoung
2

mysql -u USERHERE -pPASSWORDHERE --silent --skip-column-names -e "SHOW TABLES" DATABASENAMEHERE | xargs -L1 -I% echo 'SET FOREIGN_KEY_CHECKS = 0; DROP TABLE%;' | mysql -u USERHERE -pPASSWORDHERE -v DATABASENAMEHERE

sveilleux2
fonte
2
Bem-vindo ao Super Usuário! Embora isso possa responder à pergunta, seria uma resposta melhor se você pudesse explicar por que isso acontece. Estamos procurando respostas abrangentes e de alta qualidade que forneçam alguma explicação e contexto. Não basta dar uma resposta em uma linha; explique por que sua resposta está correta, idealmente com citações. As respostas que não incluem explicações podem ser removidas. Além disso, verifique sua formatação.
G-Man diz 'Reinstate Monica'
Não se esqueça de definir Foreign_key_checks = 1 após soltar tabelas: consulte stackoverflow.com/a/2873991/4306855 mysql -u USERHERE -pPASSWORDHERE --silent --skip-column-names -e "MOSTRAR TABELAS" DATABASENAMEHERE | xargs -L1 -I% echo 'SET FOREIGN_KEY_CHECKS = 0; DROP TABLE%; SET FOREIGN_KEY_CHECKS = 1; ' | mysql -u USERHERE -pPASSWORDHERE -v DATABASENAMEHERE
toto21