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_TABELAPor 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