Eliminar todas as tabelas no MySQL
- Consulta SQL para Largar Todas as Tabelas
- Esvaziar e Recriar a Base de Dados
- Verificação de tabelas apagadas
Este tutorial demonstra várias formas como um utilizador pode eliminar todas as tabelas no MySQL e lista exemplos de scripts para torná-lo possível.
A razão pela qual não se pode abandonar todas as tabelas numa única linha de código é que, numa base de dados dimensionável e bem desenhada, haverá provavelmente muitas restrições de chave estrangeira.
Consulta SQL para Largar Todas as Tabelas
-
A primeira coisa a fazer é fazê-lo de modo a que não seja necessário verificar os constrangimentos chave estrangeiros.
SET FOREIGN_KEY_CHECKS = 0;
-
Em seguida, escreva um guião para consultar todas as tabelas dentro da sua base de dados.
SELECT table_name FROM information_schema.tables WHERE table_schema = db_name;
-
Em seguida, copie todas as tabelas no resultado da consulta acima referida e apague-as uma a uma.
DROP TABLE IF EXISTS tableOne; DROP TABLE IF EXISTS tableTwo; DROP TABLE IF EXISTS tableThree; DROP TABLE IF EXISTS tableEtc;
-
Redefinir a configuração de verificação de chave estrangeira para o padrão
SET FOREIGN_KEY_CHECKS = 1;
Esta abordagem é possível porque desactivámos a verificação de chaves estrangeiras no início. Assim, qualquer que seja a ordem em que apagamos as tabelas, não irá lançar qualquer erro de constrangimento. Basta assegurar que a verificação da chave estrangeira é novamente activada após o guião.
Esvaziar e Recriar a Base de Dados
Para que isto seja possível, é necessário certificar-se de que, para além das tabelas, também está disposto a apagar funções armazenadas, índices, papéis e outras definições, para além das tabelas, uma vez que está a deixar cair toda a base de dados.
Para que isto seja executado com sucesso, a função actual deve ter privilégios de “largar” e “criar” na base de dados.
DROP DATABASE database_name;
Depois de largar, recriar a base de dados.
CREATE DATABASE database_name;
Esta abordagem é, muito provavelmente, o método mais volátil de deixar cair todas as tabelas. Isto é adequado apenas para bases de dados pequenas ou experimentais.
Utilizar mysqldump
para largar as tabelas no MySQL
O mysqldump
é um comando de consola atribuído a partir do MySQL. Assumindo que já tem o MySQL configurado nas suas variáveis de caminho, podemos utilizar o comando para largar tabelas dentro da sua base de dados.
-
O primeiro passo ainda é desactivar a verificação de chaves estrangeiras na consola.
echo "SET FOREIGN_KEY_CHECKS = 0" > ./temp.sql
-
Proceda à descarga da base de dados utilizando
mysqldump
e largue as tabelasmysqldump --add-drop-table --no-data -u rootuser -p database_name | grep 'DROP TABLE' >> ./temp.sql
-
Reative a verificação de chave estrangeira no console.
echo "SET FOREIGN_KEY_CHECKS = 1;" >> ./temp.sql
-
Restaurar a sua base de dados utilizando o ficheiro dump
mysql -u root -p db_name < ./temp.sql
Isto funcionará mais facilmente se tiver conhecimento sobre comandos de consola e tiver o MySQL configurado na sua variável de caminho.
Verificação de tabelas apagadas
Para verificar se todas as tabelas foram realmente apagadas, podemos verificar a base de dados se ela ainda produz as tabelas com este script.
SHOW TABLES FROM database_name;
Se não houver saída, isso significa que a consulta foi executada com sucesso, e que todas as tabelas SQL dessa base de dados específica foram eliminadas.
Em resumo, a razão pela qual não se pode apagar tabelas em massa directamente em SQL é que as bases de dados relacionais dependem fortemente de relações e restrições. Se lhe foi permitido apagar tabelas sem desactivar explicitamente a verificação de chaves estrangeiras, as relações, restrições, e configurações de chaves estrangeiras serão corrompidas.
Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.
LinkedIn