Como executar vários arquivos sql em um comando único pelo CMD do windows
Olá!
Hoje vou mostrar para você uma maneira fácil e rápida para rodar vários arquivos sql em um servidor mysql através de um único comando, através do prompt de comando do windows (cmd).
A necessidade surgiu devido a uma reestruturação do banco de dados, onde vários arquivos sql são responsáveis pela criação e importação de dados, criação de novas tabelas, alteração da estrutura de tabelas dentre outras coisas. Era muito chato a cada alteração ou testes de um dos arquivos ter que apagar o banco, recriar e rodar todos os arquivos um por um.
Então vamos lá!
Primeiro vamos criar um novo banco para o exemplo, chamado meubanco:
DROP DATABASE IF EXISTS `meubanco`; CREATE DATABASE `meubanco`;
Salve este arquivo, por exemplo, em C:dadosmeubancomeubanco.sql (use um editor como o notepad para salvar).
CREATE TABLE `tabela1` ( id INT(11) NOT NULL AUTO_INCREMENT, descricao VARCHAR(45) NOT NULL, data DATETIME, PRIMARY KEY id, ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE `tabela2` ( id INT(11) NOT NULL AUTO_INCREMENT, descricao VARCHAR(45) NOT NULL, data DATETIME, PRIMARY KEY id, ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Salve este arquivo, por exemplo, em C:dadosmeubancomeubanco_estrutura.sql (para tornar mais fácil o processo, salve todos os arquivos sql na mesma pasta).
Agora vamos inserir alguns dados nas tabelas:
INSERT INTO tabela1 (descricao,data) VALUES
('Esta é a linha 1 da tabela 1','2009-09-16 13:45:12'),
('Esta é a linha2 da tabela 1',now()),
('Esta é a linha 3 da tabela 1',now()),
('Esta é a linha 4 da tabela 1',now());
INSERT INTO tabela2 (descricao,data) VALUES
('Esta é a linha 1 da tabela 2','2009-09-23 23:12:30'),
('Esta é a linha2 da tabela 2',now()),
('Esta é a linha 3 da tabela 2',now()),
('Esta é a linha 4 da tabela 2',now());
Salve este arquivo, por exemplo, em C:dadosmeubancomeubanco_dados.sql .
Agora suponhamos que você tenha feito a seguinte alteração na estrutura:
ALTER TABLE `tabela1` ADD COLUMN `usuario` INT(11) , ADD INDEX `ix_usuario`(`usuario`); ALTER TABLE `tabela2` ADD COLUMN `id_tabela1` INT(11) , ADD INDEX `ix_id_tabela1`(`id_tabela1`);
Salve este arquivo, por exemplo, em C:dadosmeubancomeubanco_alteracao.sql, na mesma pasta que os outros.
Este exemplo é bem simples perto da real necessidade de se rodar vários arquivos sql, mas serve apenas para ilustrar uma situação em que realmente exista esta necessidade (como foi o meu caso, onde várias pessoas fizeram várias alterações em partes diferentes da estrutura de dados, e era necessário reestruturar o banco algumas vezes no mesmo dia, e várias vezes para testar localmente para não correr risco de perder os dados existentes no servidor live).
Voltando ao exemplo, abra o prompt de comando do windows (Iniciar => Executar => cmd), e teste se você consegue executar o mysql de qualquer pasta:
Se você usa senha, use -p no final do comando. Verifique se sua tela ficou parecida com a tela abaixo:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 26
Server version: 5.1.32-community MySQL Community Server (GPL)Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the buffer.
mysql>
Se você não conseguiu, você terá de setar o caminho para o mysql como uma variável de ambiente do windows. Para isso, entre no Painel de controle e abra Sistema (ou tecle simultaneamente a tecla com o logo do windows e a tecla Pause Break). Vá na guia Avançado e clique em Variáveis de Ambiente. Na janela que abre, selecione Path em Variáveis do sistema e clique em Editar. Na nova janela que abrir, em Valor da variável, acrescente o caminho para o mysql (no meu caso, C:Arquivos de programasMySQLMySQL Server 5.1bin). Certifique-se de que exista um ; separando o caminho que você acrescentou e os que já existiam, e que não existem espaços em branco antes e depois de ;. Salve e dê ok nas janelas. Pronto. Feche o cmd e tente novamente. Se conseguir, de exit para voltar a pasta e vá até a pasta dos arquivos sql:
Bye
C:Documents and Settingsusuario>cd C:dadosmeubanco
C:dadosmeubanco>
Agora vamos criar o arquivo *.bat que fará a execução dos scripts sqls. Abra o bloco de notas ou seu editor preferido, e digite nele:
@echo OFF echo Criando o banco de dados... mysql -u root < meubanco.sql echo Criando a estrutura de dados... mysql -u root meubanco < meubanco_estrutura.sql echo Inserindo os dados... mysql -u root meubanco < meubanco_dados.sql echo Alterando a estrutura... mysql -u root meubanco < meubanco_alteracao.sql echo Fim do Script!
Salve o arquivo como cria_meubanco.bat. Volte ao prompt do windows, digite cria_meubanco e voilá! Se tudo correu bem, você verá a tela abaixo:
Criando o banco de dados…
Criando a estrutura de dados…
Inserindo os dados…
Alterando a estrutura…
Fim do Script!
C:dadosmeubanco>
Pronto! Você acabou de criar um arquivo em lotes executável pelo prompt do windows, que poderá te poupar muito tempo no seu dia a dia de desenvolvedor.
Deixe seu comentário!
Até a próxima!

Funciona tambem para outros bancos de dados? como FireBird?
obrigado