Um certo dia, em minha aula de gerenciamento de banco de dados, no meu curso de sistemas de informação, foi passado um seminário de apresentação, onde cada grupo teria que fazer um determinado exercício sobre gerenciamento de banco de dados e apresentar pra sala de aula a solução. Foi realizado um sorteio e meu grupo saiu com o mais fácil.
Na apresentação, deveríamos mostrar como importar dados contidos em um arquivo para o PostGreSQL, em minhas pesquisas vi que seria possível, importar dados usando extensões TXT, PDF, CSV, XLS, mas no nosso caso, utilizamos a importação de TXT.
Na época, nossa apresentação foi baseada, primeiramente, no tutorial do link abaixo:
O mesmo comando foi usado pra fazer importação e um arquivo TXT para o postgresql, na época eu usava Windows por causa do Visual Studio, pois usamos na maior parte do curso a linguagem C# e Java, na época funcionou perfeitamente os passos do link acima.
Então, com base nisso, resolvi ver como seria no
MariaDB(Mysql).
Será criado um banco de dados chamado "teste" para os fins dos passos abaixo. Partindo do pressuposto de que você já tenta seu MariaDB ativado no Slackware vamos aos passos. Os dados do arquivo TXT serão os dados abaixo:
- 01; Boi Preto; 2000-02-29
- 02; Sol Nascente; 2009-10-01
- 03; Parque Belo; 2007-03-15
- 04; Pedra Bonita; 2001-08-25
- 05; Nossa Senhora; 2011-06-22
1°) Passo
Vamos criar o arquivo contendo os dados no diretório do seu usuário comum.
Digite a seguinte linha abaixo e pressione enter e depois que apareceu ">", copie e cole o conteúdo acima que será importado para o banco de dados "teste". Depois de copiado, pressione
Enter e digite: EOF
cat >~/cadastros.txt<<EOF
>01; Boi Preto; 2000-02-29
>02; Sol Nascente; 2009-10-01
>03; Parque Belo; 2007-03-15
>04; Pedra Bonita; 2001-08-25
>05; Nossa Senhora; 2011-06-22
EOF
2°) Passo
Vamos logar no MariaDB:
su -c "mysql -h localhost -u root -p"
Senha: <digite a senha do admin root>.
Pressione: ENTER
Enter password: <digite a senha do seu MariaDB(Mysql)>
Pressione: ENTER
Caso você tenha o
sudo ativado em seu Slackware, faça:
sudo mysql -h localhost -u root -p
Senha: <digite a senha do admin root>.
Pressione: ENTER
Enter password: <digite a senha do seu MariaDB(Mysql)>
Pressione: ENTER
E aparecerá a seguinte mensagem:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 19
Server version: 10.0.32-MariaDB MariaDB Server
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
3°) Passo
Logado no MariaDB, vamos criar o banco teste:
MariaDB [(none)]>
create database teste;
Query OK, 1 row affected (0.00 sec)
4°) Passo
Entrando no banco teste para criarmos a tabela:
MariaDB [(none)]>
use teste;
Feito isso, aparecerá o seguinte terminal abaixo:
MariaDB [teste]>
5°) Passo
Criaremos a tabela cadastros:
MariaDB [teste]>
create table cadastros(
->
`id_faz` int unique not null primary key,
->
`nome_faz` varchar(25) unique not null,
->
`data_compra` date not null
->
);
Query OK, 0 rows affected (0.00 sec)
6°) Passo
Importando o arquivo "cadastros.txt" para o banco teste:
MariaDB [teste]>
load data local infile "cadastros.txt" into table cadastros fields terminated by ';';
Query OK, 5 rows affected (0.01 sec)
Records: 5 Deleted: 0 Skipped: 0 Warnings: 0
Onde: "terminated by" é o separador dos dados dentro do arquivo.
7°) Passo
Listaremos os dados inseridos na tabela:
MariaDB [teste]>
select * from cadastros;
+--------+---------------------+------------------+
| id_faz | nome_faz | data_compra |
+--------+----------------------+-----------------+
| 1 | Boi Preto | 2000-02-29 |
| 2 | Sol Nascente | 2009-10-01 |
| 3 | Parque Belo | 2007-03-15 |
| 4 | Pedra Bonita | 2001-08-25 |
| 5 | Nossa Senhora | 2011-06-22 |
+--------+----------------------+-----------------+
5 rows in set (0.00 sec)
Nossos dados do arquivo foram importados com sucesso.
Agora, vamos realizar os mesmos passos acima, mas com auto_increment. Primeiro, vamos exportar os dados importados em nossa tabela cadastros para um novo arquivo, que será salvo em
/tmp, chamado "exportacao.txt".
8°) Passo
Exportando os dados da tabela cadastros para a pasta
/tmp/ no arquivo "exportacao.txt":
MariaDB [teste]>
select id_faz, nome_faz, data_compra into outfile "/tmp/exportacao.txt" fields terminated by ';' from cadastros;
Query OK, 6 rows affected (0.00 sec)
Este comando acima exporta campos específicos de uma tabela, a priori, poderíamos deixar o campo "id_faz" de lado, mas como estamos aprendendo a exportar os dados de uma tabela, estamos exportando todos os campos.
Ou, você também pode usar um destes comando abaixo:
MariaDB [teste]>
select * from cadastros into outfile "/tmp/exportacao.txt" fields terminated by ';';
Query OK, 5 rows affected (0.00 sec)
MariaDB [teste]>
select * into outfile "/tmp/exportacao.txt" fields terminated by ';' from cadastros;
Query OK, 5 rows affected (0.00 sec)
Com estes três comandos acima, todos os campos da tabela são exportados para
/tmp/exportacao.txt, nossos dados exportados ficarão no formato abaixo sem o separador ";" no final:
cat /tmp/exportacao.txt
1;Boi Preto;2000-02-29
2;Sol Nascente;2009-10-01
3;Parque Belo;2007-03-15
4;Pedra Bonita;2001-08-25
5;Nossa Senhora;2011-06-22
Você também pode usar este comando abaixo:
MariaDB [teste]>
select * into outfile "/tmp/exportacao.txt" fields terminated by ';' lines terminated by ';\n' from cadastros;
Query OK, 5 rows affected (0.01 sec)
Com este comando acima, nossos dados exportados para
/tmp/exportacao.txt ficarão no formato abaixo. Note os separadores ";" no final:
cat /tmp/exportacao.txt
1;Boi Preto;2000-02-29;
2;Sol Nascente;2009-10-01;
3;Parque Belo;2007-03-15;
4;Pedra Bonita;2001-08-25;
5;Nossa Senhora;2011-06-22;
Com estes comandos acima, não importa como nossos dados exportados para
/tmp/exportacao.txt ficarão formatados, você só não pode usar o comando abaixo, pois a forma como ele exporta os dados dificulta nosso serviço, aumentando a complexidade, mas como queremos manter as coisas mais simples, não o use para esta finalidade:
MariaDB [teste]>
select * into outfile "/tmp/exportacao.txt" fields terminated by ';' enclosed by '"' lines terminated by '' from cadastros;
9ª) Passo
Vamos editar o arquivo exportado removendo todos os id's, deixando somente os nomes e datas. Atualmente, nosso arquivo em
/tmp/exportacao.txt se encontra no formato abaixo:
cat /tmp/exportacao.txt
1; Boi Preto;2000-02-29
2; Sol Nascente;2009-10-01
3; Parque Belo;2007-03-15
4; Pedra Bonita;2001-08-25
5; Nossa Senhora;2011-06-22
Então, precisamos remover os id's, mas, não podemos remover os separadores após os id's, é ai que está o pulo do gato para termos sucesso na nossa importação em uma tabela com
auto_increment. Então, digite o comando abaixo para formatar o arquivo:
su -c "sed -i 's/^1//g;s/^2//g;s/^3//g;s/^4//g;s/^5//g;s/^ *//g;' /tmp/exportacao.txt"
Senha: <digite a senha do admin root>.
Pressione: ENTER
Este comando
sed acima, removerá somente os id's mantendo os separadores, então nosso arquivo em
/tmp/exportacao.txt ficará assim como este abaixo. Note os separadores ";" no inicio da linha:
cat /tmp/exportacao.txt
;Boi Preto;2000-02-29
;Sol Nascente;2009-10-01
;Parque Belo;2007-03-15
;Pedra Bonita;2001-08-25
;Nossa Senhora;2011-06-22
Ou, você também pode usar um destes comando abaixo, este comando é mais útil pois geralmente uma tabela exportada, contém centenas ou milhares de registros:
MariaDB [teste]>
select nome_faz, data_compra into outfile "/tmp/exportacao.txt" fields terminated by ';' lines terminated by ';\n' from cadastros;
Query OK, 5 rows affected (0.00 sec)
MariaDB [teste]>
select nome_faz, data_compra from cadastros into outfile "/tmp/exportacao.txt" fields terminated by ';' lines terminated by ';\n';
Query OK, 5 rows affected (0.00 sec)
Com estes dois comandos acima, nossos dados exportados para
/tmp/exportacao.txt, ficou sem os id's que se encontra no campo "id_faz" deixado de lado, ficando no formato abaixo. Note os separadores ";" no final e a ausência dos id's:
cat /tmp/exportacao.txt
Boi Preto;2000-02-29;
Sol Nascente;2009-10-01;
Parque Belo;2007-03-15;
Pedra Bonita;2001-08-25;
Nossa Senhora;2011-06-22;
Então, precisamos adicionar os separadores que estariam após os id's que foi deixado de lado, precisamos colocar os separadores ";" antes dos nomes, pois sem estes separadores, todo nosso trabalho vai por água abaixo quando importar o arquivo para a tabela de volta. Então, digite o comando abaixo para formatar o arquivo:
su -c "sed -i '/^/ s//;/g;' /tmp/exportacao.txt"
Senha: <digite a senha do admin root>.
Pressione: ENTER
O comando
sed acima, adicionará os separadores ";" antes dos nomes,
entao nosso arquivo em /tmp/exportacao.txt ficara assim como este abaixo,
note os separadores ";" no inicio da linha:
bash-4.4$ cat /tmp/exportacao.txt
;Boi Preto;2000-02-29;
;Sol Nascente;2009-10-01;
;Parque Belo;2007-03-15;
;Pedra Bonita;2001-08-25;
;Nossa Senhora;2011-06-22;
10°) Passo
Vamos deletar nossa tabela cadastros para recriar novamente mas com auto_increment:
MariaDB [teste]>
drop table cadastros;
Query OK, 0 rows affected (0.04 sec)
11°) Passo
Recriando a tabela cadastros com auto_increment:
MariaDB [teste]>
create table cadastros(
-> `id_faz` int auto_increment,
-> `nome_faz` varchar(25) unique not null,
-> `data_compra` date not null
-> );
Query OK, 0 rows affected (0.01 sec)
Ou, se preferir, pode apenas alterar o campo id_faz. Para que o campo seja auto_increment, digite o comando abaixo:
MariaDB [teste]>
alter table cadastros change `id_faz` `id_faz` int auto_increment;
Query OK, 5 rows affected (0.04 sec)
Records: 5 Duplicates: 0 Warnings: 0
12°) Passo
Precisamos fazer um truncate na nossa tabela cadastros, simplesmente por que criamos os campos nome_faz como
unique, caso contrário, poderíamos fazer apenas a importação novamente, pois ficaria com id's auto_increment de 6 a 10. Mas os dados ficariam redundantes, isso se você está fazendo uma reimportação dos dados que foram exportados da mesma tabela, onde o campo nome seja unique, ou até mesmo de outra tabela que possua um nome gravado no campo, e seja o mesmo que já está gravado na tabela atual, caso contrário, tudo se sucederá perfeitamente.
MariaDB [teste]>
truncate table cadastros;
Query OK, 0 rows affected (0.01 sec)
MariaDB [teste]>
select * from cadastros;
Empty set (0.00 sec)
13°) Passo
Importando novamente o arquivo
/tmp/exportacao.txt já formatado no 9ª passo, para o banco teste:
MariaDB [teste]>
load data local infile "/tmp/exportacao.txt" into table cadastros fields terminated by ';';
Query OK, 5 rows affected, 5 warnings (0.81 sec)
Records: 5 Deleted: 0 Skipped: 0 Warnings: 5
MariaDB [teste]>
select *from cadastros;
+--------+---------------------+------------------+
| id_faz | nome_faz | data_compra |
+--------+----------------------+-----------------+
| 1 | Boi Preto | 2000-02-29 |
| 2 | Sol Nascente | 2009-10-01 |
| 3 | Parque Belo | 2007-03-15 |
| 4 | Pedra Bonita | 2001-08-25 |
| 5 | Nossa Senhora | 2011-06-22 |
+--------+----------------------+-----------------+
5 rows in set (0.00 sec)
Conclusão
Bom, se você fez todos os passos acima com atenção, tudo ocorrerá perfeitamente.
Referências: