Slackware + MariaDB (MySQL): importando e exportando arquivos TXT

O presente artigo trata da configuração do MariaDB (MySQL) no Slackware.

[ Hits: 1.090 ]

Por: Jean César em 21/03/2018


Introdução



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:
   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

PostgreSQL no Slackware - Importando e Exportando arquivos TXT e CSV

Ativando e configurando a compactação de memória com Zram no Slackware

Leitura recomendada

Amarok: migrando de SQLite para MySQL

MySQL Workbench: Criando um Schema do Zero

SQL Dicas & Truques (parte 2)

Sincronização segura entre bancos de dados MySQL utilizando SJA

Store Procedures com Transaction no MySQL

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor HostGator.
Linux banner
Linux banner
Linux banner

Artigos

Dicas

Viva o Android

Tópicos

Top 10 do mês

Scripts