Eliminar todas as tabelas no MySQL

Rayven Esplanada 30 janeiro 2023
  1. Consulta SQL para Largar Todas as Tabelas
  2. Esvaziar e Recriar a Base de Dados
  3. Verificação de tabelas apagadas
Eliminar todas as tabelas no MySQL

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 tabelas
    mysqldump --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.

Rayven Esplanada avatar Rayven Esplanada avatar

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

Artigo relacionado - MySQL Table