?>
1-mysql Básico
Exercícios
?>

6-Carregando Dados na Tabela

A tabela criada está vazia. Para verificar isso use o comando SELECT com o "curinga" *. Ele especifica que desejamos selecionar tudo (usando o curinga *) da tabela meuscds.

$> select * from CDs;

Uso do SELECT *

                            
mysql> select * from CDs;
Empty set (0.01 sec)
                            

Obviamente, como não colocamos nada até o momento, o resultado dessa consulta é vazio.

Para colocarmos dados na tabela usamos os comandos LOAD ou INSERT INTO.

Instrução INSERT INTO(Clique aqui para saber mais).

A instrução INSERT INTO é usada com o nome da tabela, a palavra chave VALUES e os valores que vamos inserir

INSERT INTO table_name
VALUES (value1, value2, value3, ...);

(nesse caso todas as colunas são preenchidas)

Pode ser usar a instrução INSERT especificando as colunas que serão inseridas:

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

Veja dois exemplo do uso da instrução INSERT

Exemplo 1: Uso do INSERT INTO com todas as colunas

                            
mysql> insert into CDs
    -> values(1,'Elomar,Xangai e Outros','Cantoria 1','Brasil','MPB',13,1984);
Query OK, 1 row affected (0.06 sec)

mysql> select * from CDs
    -> ;
+----+------------------------+------------+--------+------------+------------+------+
| id | Autor                  | Album      | Pais   | TipoMusica | NumMusicas | Ano  |
+----+------------------------+------------+--------+------------+------------+------+
|  1 | Elomar,Xangai e Outros | Cantoria 1 | Brasil | MPB        |         13 | 1984 |
+----+------------------------+------------+--------+------------+------------+------+
1 row in set (0.00 sec)


                            

Exemplo 2: Uso do INSERT INTO com ALGUMAS colunas

                            

mysql> insert into
    -> CDs
    -> (id,Autor,Ano)
    -> values(2,'Elomar e Outros',1985);
Query OK, 1 row affected (0.08 sec)

mysql> select * from CDs;
+----+------------------------+------------+--------+------------+------------+------+
| id | Autor                  | Album      | Pais   | TipoMusica | NumMusicas | Ano  |
+----+------------------------+------------+--------+------------+------------+------+
|  1 | Elomar,Xangai e Outros | Cantoria 1 | Brasil | MPB        |         13 | 1984 |
|  2 | Elomar e Outros        | NULL       | NULL   | NULL       |       NULL | 1985 |
+----+------------------------+------------+--------+------------+------------+------+
2 rows in set (0.00 sec)
                            
                        

IMPORTANTE

Número de Colunas e Valores

Se vamos inserir dados sem especificar as colunas, estamos considerando que serão inseridos dados em todas elas. Assim, se faltar algum valor, haverá erro. Veja um exemplo:

mysql> insert into CDs values ('Elomar,Xangai e Outros','Cantoria 1','Brasil','MPB',13,1984);
ERROR 1136 (21S01): Column count doesn't match value count at row 1

Nesse caso, faltou o valor da primeira coluna, o id.

Colunas que aceitam NULL

Se vamos inserir em todas as colunas, podemos usar a palavra chave NULL para deixar vazias as colunas que não formos colocar dados. No exemplo a seguir colocamos NULL nas três últimas colunas.

insert into CDs values(1,'Elomar,Xangai e Outros','Cantoria 1','Brasil',NULL,NULL,NULL);

+----+------------------------+------------+--------+------------+------------+------+
| id | Autor                  | Album      | Pais   | TipoMusica | NumMusicas | Ano  |
+----+------------------------+------------+--------+------------+------------+------+
|  1 | Elomar,Xangai e Outros | Cantoria 1 | Brasil | NULL       |       NULL | NULL |
+----+------------------------+------------+--------+------------+------------+------+

Colunas que NÃO aceitam NULL

insert into CDs values(1,'Elomar,Xangai e Outros','Cantoria 1','Brasil',NULL,NULL,NULL);

+----+------------------------+------------+--------+------------+------------+------+
| id | Autor                  | Album      | Pais   | TipoMusica | NumMusicas | Ano  |
+----+------------------------+------------+--------+------------+------------+------+
|  1 | Elomar,Xangai e Outros | Cantoria 1 | Brasil | NULL       |       NULL | NULL |
+----+------------------------+------------+--------+------------+------------+------+

Dependendo de como construimos o Banco de Dados, algumas colunas devem ter OBRIGATORIAMENTE valores. Nesse caso, elas não aceitam valores NULL. Caso tentemos inserir NULL, o mysql vai acusar erro.

mysql> insert into CDs values (NULL,'Elomar,Xangai e Outros','Cantoria 1','Brasil','MPB',13,1984);
ERROR 1048 (23000): Column 'id' cannot be null

ou 

mysql>  insert into CDs values(1,NULL,'Cantoria 1','Brasil',NULL,NULL,NULL);
ERROR 1048 (23000): Column 'Autor' cannot be null

Inserindo mais de uma linha

Podemos inserir quantas linhas desejarmos no comando INSERT INTO. No exemplo abaixo inserimos duas linhas (id=2 e id=3);


mysql> insert into CDs
    -> (id,Autor,Album)
    -> Values(2,'Elomar, Xangai e Outros','Cantoria 2'),
    -> (3,'Pink Floyd','Final Cut');
Query OK, 2 rows affected (0.09 sec)
Records: 2  Duplicates: 0  Warnings: 0

Resultado Final das Inserções

                            

mysql> insert into CDs
    -> (id,Autor,Album)
    -> Values(2,'Elomar, Xangai e Outros','Cantoria 2'),
    -> (3,'Pink Floyd','Final Cut');
Query OK, 2 rows affected (0.06 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from CDs;
+----+-------------------------+------------+--------+------------+------------+------+
| id | Autor                   | Album      | Pais   | TipoMusica | NumMusicas | Ano  |
+----+-------------------------+------------+--------+------------+------------+------+
|  1 | Elomar,Xangai e Outros  | Cantoria 1 | Brasil | MPB        |         13 | 1984 |
|  2 | Elomar e Outros         | NULL       | NULL   | NULL       |       NULL | 1985 |
|  1 | Elomar,Xangai e Outros  | Cantoria 1 | Brasil | NULL       |       NULL | NULL |
|  1 | Elomar,Xangai e Outros  | Cantoria 1 | Brasil | NULL       |       NULL | NULL |
|  2 | Elomar, Xangai e Outros | Cantoria 2 | NULL   | NULL       |       NULL | NULL |
|  3 | Pink Floyd              | Final Cut  | NULL   | NULL       |       NULL | NULL |
+----+-------------------------+------------+--------+------------+------------+------+
6 rows in set (0.00 sec)


                        

A figura acima mostra o Banco de Dados após fazermos os testes acima.

Antes de prosseguirmos, vamos "fazer uma limpeza" no Banco de Dados, eliminando algumas linhas.

Para isso vamos usar a instrução DELETE.

Instrução DELETE (vide mais detalhes : aqui

A sintaxe da instrução delete é:

DELETE FROM table_name
WHERE condition;

Por exemplo, podemos fazer:

Deletando Linhas

                            




mysql> delete from CDs where id=1 and TipoMusica is NULL;
Query OK, 2 rows affected (0.04 sec)

mysql> select * from CDs;
+----+-------------------------+------------+--------+------------+------------+------+
| id | Autor                   | Album      | Pais   | TipoMusica | NumMusicas | Ano  |
+----+-------------------------+------------+--------+------------+------------+------+
|  1 | Elomar,Xangai e Outros  | Cantoria 1 | Brasil | MPB        |         13 | 1984 |
|  2 | Elomar e Outros         | NULL       | NULL   | NULL       |       NULL | 1985 |
|  2 | Elomar, Xangai e Outros | Cantoria 2 | NULL   | NULL       |       NULL | NULL |
|  3 | Pink Floyd              | Final Cut  | NULL   | NULL       |       NULL | NULL |
+----+-------------------------+------------+--------+------------+------------+------+
4 rows in set (0.00 sec)

                        

Quando vamos deletar uma linha que tenha NULL e desejamos usar o critério NULL como condição, fazemos:

NOME_COLUNA is NULL 

(não usamos igual).

Acompanhe o próximo exemplo. Nele criamos três linhas que depois serão deletadas:

Exemplo 3: Inserindo Linhas

                            

mysql> insert into CDs (id,Autor,NumMusicas) Values(4,"teste",12);
Query OK, 1 row affected (0.06 sec)

mysql> insert into CDs (id,Autor,NumMusicas) Values(5,"teste",14);
Query OK, 1 row affected (0.06 sec)

mysql> insert into CDs (id,Autor,NumMusicas) Values(6,"teste",15);
Query OK, 1 row affected (0.07 sec)

mysql> select * from CDs;
+----+-------------------------+------------+--------+------------+------------+------+
| id | Autor                   | Album      | Pais   | TipoMusica | NumMusicas | Ano  |
+----+-------------------------+------------+--------+------------+------------+------+
|  1 | Elomar,Xangai e Outros  | Cantoria 1 | Brasil | MPB        |         13 | 1984 |
|  2 | Elomar e Outros         | NULL       | NULL   | NULL       |       NULL | 1985 |
|  2 | Elomar, Xangai e Outros | Cantoria 2 | NULL   | NULL       |       NULL | NULL |
|  3 | Pink Floyd              | Final Cut  | NULL   | NULL       |       NULL | NULL |
|  4 | teste                   | NULL       | NULL   | NULL       |         12 | NULL |
|  5 | teste                   | NULL       | NULL   | NULL       |         14 | NULL |
|  6 | teste                   | NULL       | NULL   | NULL       |         15 | NULL |
+----+-------------------------+------------+--------+------------+------------+------+
7 rows in set (0.00 sec)



                            

Exemplo 4: Removendo Linhas

                            
mysql> delete from CDs
    -> where id >= 4 and NumMusicas<13;
Query OK, 1 row affected (0.07 sec)

mysql> select * from CDs;
+----+-------------------------+------------+--------+------------+------------+------+
| id | Autor                   | Album      | Pais   | TipoMusica | NumMusicas | Ano  |
+----+-------------------------+------------+--------+------------+------------+------+
|  1 | Elomar,Xangai e Outros  | Cantoria 1 | Brasil | MPB        |         13 | 1984 |
|  2 | Elomar e Outros         | NULL       | NULL   | NULL       |       NULL | 1985 |
|  2 | Elomar, Xangai e Outros | Cantoria 2 | NULL   | NULL       |       NULL | NULL |
|  3 | Pink Floyd              | Final Cut  | NULL   | NULL       |       NULL | NULL |
|  5 | teste                   | NULL       | NULL   | NULL       |         14 | NULL |
|  6 | teste                   | NULL       | NULL   | NULL       |         15 | NULL |
+----+-------------------------+------------+--------+------------+------------+------+
6 rows in set (0.00 sec)




                            

Mais exemplos com delete:

Removendo Linhas

                            
mysql> delete from CDs
    -> where id = 5 and Ano is NULL;
Query OK, 1 row affected (0.06 sec)

mysql> delete from CDs
    -> where Autor = 'teste';
Query OK, 1 row affected (0.10 sec)

mysql> select * from CDs;
+----+-------------------------+------------+--------+------------+------------+------+
| id | Autor                   | Album      | Pais   | TipoMusica | NumMusicas | Ano  |
+----+-------------------------+------------+--------+------------+------------+------+
|  1 | Elomar,Xangai e Outros  | Cantoria 1 | Brasil | MPB        |         13 | 1984 |
|  2 | Elomar e Outros         | NULL       | NULL   | NULL       |       NULL | 1985 |
|  2 | Elomar, Xangai e Outros | Cantoria 2 | NULL   | NULL       |       NULL | NULL |
|  3 | Pink Floyd              | Final Cut  | NULL   | NULL       |       NULL | NULL |
+----+-------------------------+------------+--------+------------+------------+------+
4 rows in set (0.00 sec

e finalmente:

Resultado Final

                            

mysql> delete from CDs
    -> where id=2 and Album is NULL;
Query OK, 1 row affected (0.05 sec)

mysql> select * from CDs;
+----+-------------------------+------------+--------+------------+------------+------+
| id | Autor                   | Album      | Pais   | TipoMusica | NumMusicas | Ano  |
+----+-------------------------+------------+--------+------------+------------+------+
|  1 | Elomar,Xangai e Outros  | Cantoria 1 | Brasil | MPB        |         13 | 1984 |
|  2 | Elomar, Xangai e Outros | Cantoria 2 | NULL   | NULL       |       NULL | NULL |
|  3 | Pink Floyd              | Final Cut  | NULL   | NULL       |       NULL | NULL |
+----+-------------------------+------------+--------+------------+------------+------+
3 rows in set (0.00 sec)


Carregando dados via arquivo texto

Além de entrar com os dados via linha de comando, é possível carregá-los via arquivo texto. Para isso o arquivo texto precisa estar com os dados organizados em linha e com as informações de cada linha separadas por uma tabulação (e possível especificar o tipo de separação dos dados). Para isso utiliza-se o comando LOAD.

Instrução LOAD

                            

LOAD DATA  INFILE NOME_ARQUIVO' INTO TABLE NOME_TABELA
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(col1, col2, col3, col4, col5...);


Versões do mysql anteriores à 8.0 usavam a palavra chave LOCAL:

LOAD DATA LOCAL INFILE NOME_ARQUIVO' INTO TABLE NOME_TABELA

Por exemplo, podemos fazer:

Exemplo: carregando dados de um arquivo CSV

                            

mysql> delete from CDs;
Query OK, 6 rows affected (0.07 sec)

mysql> select * from CDs;
Empty set (0.00 sec)

mysql> LOAD DATA  INFILE 'cds2.csv
-> INTO TABLE CDs 
-> FIELDS TERMINATED BY ','
->  ENCLOSED BY '"' 
-> IGNORE 1 LINES
-> (id, Autor, Album, Pais, TipoMusica, NumMusicas, Ano);

Query OK, 6 rows affected (0.03 sec)
Records: 6  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from CDs;
+----+-------------------------+-------------------+------------+--------------+------------+------+
| id | Autor                   | Album             | Pais       | TipoMusica   | NumMusicas | Ano  |
+----+-------------------------+-------------------+------------+--------------+------------+------+
|  1 | Elomar, Xangai e Outros | Cantoria 1        | Brasil     | MPB          |         13 | 1984 |
|  2 | Elomar, Xangai e Outros | Cantoria 2        | Brasil     | MPB          |         10 | 1988 |
|  3 | Pink Floyd              | Final Cut         | Inglaterra | RockProgress |         12 | 1983 |
|  4 | Pink Floyd              | The Wall          | Inglaterra | RockProgress |         26 | 1979 |
|  5 | Fleetwood Mac           | Rumors            | Inglaterra | ClassicRock  |         11 | 1977 |
|  6 | Chico Buarque           | Meus Caros Amigos | Brasil     | MPB          |         10 | 1977 |
+----+-------------------------+-------------------+------------+--------------+------------+------+
6 rows in set (0.00 sec)

mysql> 


                            

Nesse exemplo, primeiro deletamos todas as linhas (quando usamos delete sem alguma condição (cláusula WHERE) nós deletemos todas as linhas). Depois usamos o comando LOAD para carregar os dados do aquivo cds2.csv.

Para permitirmos o mysql carregar arquivos, temos que configurar a variável local secure_file_priv

Para isso precisamos editar o arquivo my.cnf. Veja a vídeo aula específica sobre como carregar arquivos no mysql para ver todo o processo.

Variável local secure_file_priv

                            
Após configurar a variável "secure_file_priv", verifico seu status fazendo:

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv |       |
+------------------+-------+
1 row in set (0.01 sec)



Estando com a coluna VALUE vazia, significa que o arquivo que vou carregar está na pasta default dada por:


/var/lib/mysql/BANCO_DE_DADOS_CORRENTE