Tive a necessidade de largar todas as tabelas no MySQL hoje. O servidor de produção não tem o phpMyAdmin, que é a minha ferramenta favorita no meu ambiente de desenvolvimento para gerenciar bancos de dados MySQL. Então eu estava preso com o console do MySQL, e precisava de uma maneira fácil de fazer o trabalho.
Como eu sempre digo “Google it”.
Eu encontrei um script elegante em SOW. Neste artigo, vou descrever o que ele faz linha por linha.
SET FOREIGN_KEY_CHECKS = 0;
Esta linha desabilita as restrições de chave estrangeira. Se duas tabelas estão associadas uma à outra, então você não pode deixar cair nenhuma das tabelas. A restrição de chave estrangeira não permite fazer isso.
SET GROUP_CONCAT_MAX_LEN=32768;
Esta linha define o comprimento máximo da função CONCAT. Nas seguintes linhas do script, você verá uma concatenação. Em algumas configurações do MySQL, este valor pode ser muito baixo. Então para evitar possíveis erros, definimos um valor suficientemente grande.
SET @tables = NULL;
Esta é a variável que armazenamos o nome das tabelas.
SELECT GROUP_CONCAT('`', table_name, '`') INTO @tables FROM information_schema.tables WHERE table_schema = (SELECT DATABASE());
Lembre que todo o seu esquema mysql é armazenado no banco de dados information_schema. SELECT DATABASE() é usado para determinar a base de dados usada atualmente. Esta linha seleciona a lista de tabelas no banco de dados atual, e as decora com o caractere (`), e o resultado final será armazenado na variável tabelas como esta, `table_1`, `table_2`, …, `table_n`.
SELECT IFNULL(@tables,'dummy') INTO @tables;
Esta linha coloca “dummy” na variável tabelas se a variável for NULL. Esta linha assegura que a variável da tabela nunca é NULL.
SET @tables = CONCAT('DROP TABLE IF EXISTS ', @tables);
Esta linha adiciona “DROP TABLE IF EXISTS” antes da variável da sua tabela. Então o resultado final será “DROP TABLE IF EXISTS `table_1`, `table_2`, …, `table_n`.
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Não há necessidade de separar estas três linhas. Estas linhas executam a frase SQL nas tabelas da variável.
SET FOREIGN_KEY_CHECKS = 1;
Finalmente esta linha activa a opção de verificação de restrição de chave estrangeira.
Eu gostei muito deste pequeno script. Ele é realmente útil. Espero que o ajude a compreender melhor como funciona.