No último artigo, MySQL Básico - Realizando consultas , vimos como realizar consultas simples no banco de dados MySQL, neste artigo aprenderemos como atualizar dados já inseridos em uma tabela.
Primeiramente acesse o utilitário de linha de comando do MySQL, selecione a base de dados Locadora e verifique a existência da tabela filmes.
mysql> use locadora;
Database changed
mysql> show tables;
+--------------------+
| Tables_in_locadora |
+--------------------+
| filmes |
+--------------------+
1 row in set (0.05 sec)
O comando SQL que nos permite atualizar dados no MySQL é o comando UPDATE.
A sintaxe básica do comando UPDATE é a seguinte:
UPDATE nome_tabela SET nome_coluna1=expr1 [, nome_coluna2=expr2 ...] [WHERE definição_where]
UPDATE é aplicado a uma tabela e a cláusula SET atribui a um campo o valor de uma expressão que pode ou não conter o valor de um campo da própria tabela. A cláusula WHERE restringe as atualizações apenas aos registro que satisfação suas condições.
A partir da MySQL Versão 4.0.4, você também pode realizar operações UPDATE que cobrem múltiplas tabelas.
Vamos para um exemplo prático. Primeiro visualizaremos que dados temos em nossa tabela filmes :
mysql> select * from filmes;
+----+---------------------------------+------+------------------+
| id | titulo | ano | diretor |
+----+---------------------------------+------+------------------+
| 1 | King Kong | 2006 | Peter Jackson |
| 2 | Guerra dos Mundos | 2005 | Steven Spielberg |
| 3 | Harry Potter e o Cálise de Fogo | 2006 | Mike Newell |
+----+---------------------------------+------+------------------+
3 rows in set (0.11 sec)
Como já vismos no artigo anterior o comando SELECT * FROM filmes retorna todos os registros da tabela filmes.
Vamos supor que desejássemos mudar todos os filmes para o ano de '2006', o comando UPDATE seria o seguinte:
UPDATE filmes SET ano=2006
mysql> UPDATE filmes SET ano=2006;
Query OK, 1 row affected (0.17 sec)
Linhas que combinaram: 3 - Alteradas: 1 - Avisos: 0
O resultado do comando UPDATE notifica que três linhas combinaram com o comando (uma vez que temos três registros na tabela e não utilizamos a cláusula WHERE), e destas três, uma foi alterada (atualizada). Vamos ver como ficaram os registros:
mysql> select * from filmes;
+----+---------------------------------+------+------------------+
| id | titulo | ano | diretor |
+----+---------------------------------+------+------------------+
| 1 | King Kong | 2006 | Peter Jackson |
| 2 | Guerra dos Mundos | 2006 | Steven Spielberg |
| 3 | Harry Potter e o Cálise de Fogo | 2006 | Mike Newell |
+----+---------------------------------+------+------------------+
3 rows in set (0.00 sec)
Perceba que todos os filmes agora tem o valor '2006' no campo 'ano'. Os filmes que já tinham o valor '2006' para 'ano' foram ignorados pelo comando UPDATE.
Neste primeiro exemplo não utilizamos a cláusula WHERE, e o comando UPDATE tentou mudar todo e qualquer registro para o ano de '2006', é claro que isto não é um comportamento ideal para a maioria de nossa necessidades.
Vamos realizar uma atualização de um só registro desta vez. Para isto vamos restringir o comando UPDADE com a cláusula WHERE.
mysql> UPDATE filmes SET ano=ano-1 WHERE id=2;
Query OK, 1 row affected (0.08 sec)
Linhas que combinaram: 1 - Alteradas: 1 - Avisos: 0
Neste exemplo a instrução ' WHERE id=2' restringe a atualização apenas ao registro que possuir a chave primária 'id' com o valor '2', no caso o filme 'Guerra dos Mundos'. Outro ponto importante neste exemplo é que utilizamos o próprio valor do campo 'ano' para atualizá-lo. 'SET ano=ano-1' atualiza o valor de 'ano' para '2005', uma vez que 'ano' tinha o valor de '2006' (2006 - 1 = 2005).
A tabela filmes ficou com os seguintes dados:
mysql> select * from filmes;
+----+---------------------------------+------+------------------+
| id | titulo | ano | diretor |
+----+---------------------------------+------+------------------+
| 1 | King Kong | 2006 | Peter Jackson |
| 2 | Guerra dos Mundos | 2005 | Steven Spielberg |
| 3 | Harry Potter e o Cálise de Fogo | 2006 | Mike Newell |
+----+---------------------------------+------+------------------+
3 rows in set (0.00 sec)
Exatamente como começamos :)
CONCLUSÃO
O comando SQL UPDATE utilizado com a cláusula WHERE torna-se uma ferramenta poderosa para desenvolvedores manipularem dados no MySQL. O fato de a cláusula SET aceitar atribuição de valores de expressões possibilita que trabalhemos com o valores já existentes no registro manipulado, o que também expande nosso controle sobre os dados.
Até o próximo artigo.
ANEXO I - Nossa base de dados
-- -- Estrutura da tabela `filmes` -- DROP TABLE IF EXISTS `filmes`; CREATE TABLE `filmes` ( `id` int(10) unsigned NOT NULL, `titulo` varchar(80) NOT NULL, `ano` int(4) unsigned NOT NULL, `diretor` varchar(80) NOT NULL, PRIMARY KEY (`id`) ) TYPE=MyISAM AUTO_INCREMENT=4 ; -- -- Dados da tabela `filmes` -- INSERT INTO `filmes` VALUES (1, 'King Kong', 2006, 'Peter Jackson'); INSERT INTO `filmes` VALUES (2, 'Guerra dos Mundos', 2005, 'Steven Spielberg'); INSERT INTO `filmes` VALUES (3, 'Harry Potter e o C lise de Fogo', 2006, 'Mike Newell');
MySQL Básico - O comando DELETE - Excluindo dados : 19/07/2006
Neste artigo demonstraremos como excluir registros em tabelas no banco...
MySQL Básico - O comando SELECT - Realizando consultas : 20/04/2006
Neste artigo demonstraremos como realizar consultas em uma tabela no banco...
MySQL Básico - O comando INSERT - Inserindo dados : 19/04/2006
Neste artigo demonstraremos como inserir dados em uma tabela MySQL, veremos...
MySQL Básico - O comando CREATE TABLE - Criando tabelas : 29/03/2006
Estamos iniciando uma série de artigos sobre o básico que se deve saber...