MySql

Em por

Em outro artigo, já mostramos como fazer INSERT a partir de um SELECT. Hoje iremos abordar UPDATE a partir de um SELECT, utilizando até mesmo a instrução JOIN. Atualização de dados é uma das tarefas mais importantes quando você trabalha com bancos de dados. Neste tutorial, você vai aprender como usar instrução UPDATE para atualizar dados em tabelas de banco de dados MySQL

UPDATE a partir de um SELECT, JOIN

Introdução ao MySQL instrução UPDATE

A instrução UPDATE é usada para atualizar os dados existentes nas tabelas. Ela pode ser usada para alterar os valores de coluna de uma única linha, um grupo de linhas ou todas as linhas da tabela.

O seguinte ilustra a sintaxe instrução UPDATE MySQL:

 UPDATE [LOW_ PRIORITY] [IGNORE] table_name [, table_name...] SET column_name1 = expr1 [, column_name2=expr2 ...] [WHERE condition] 

Vamos examinar a instrução UPDATE em maiores detalhes:

Seguido pela palavra-chave UPDATE é o nome da tabela que você deseja atualizar os dados. No MySQL, você pode alterar os dados de várias tabelas usando uma única instrução UPDATE. Se a instrução UPDATE viola qualquer restrição de integridade, o MySQL não irá realizar a atualização e emitirá uma mensagem de erro.

  • A cláusula SET determina os nomes das colunas da tabela e os novos valores. Os novos valores podem ser valores literais, resultado de expressões ou subconsultas.
  • A cláusula WHERE determina quais linhas serão atualizadas. É um elemento opcional da instrução UPDATE. Se a cláusula WHERE é omitida, todas as linhas da tabela será atualizada.
  • A cláusula WHERE é tão importante que você não deve esquecer. Às vezes, você pode querer mudar apenas uma linha da tabela; se você esquecer a cláusula WHERE, a instrução UPDATE irá atualizar todas as linhas, o que não é o que você esperava.

Com a palavra-chave LOW_PRIORITY, a execução de UPDATE e atrasada até que nenhum outro cliente esteja lendo a tabela. Isso afeta apenas os mecanismos de armazenamento que usam apenas bloqueio em nível de tabela (como MyISAM, memória e MERGE).

Com a palavra-chave IGNORE, a instrução não irá abortar, mesmo se ocorrerem erros durante a atualização. 

  • Linhas para as quais os conflitos de chave duplicada ocorrem em um valor de chave única não são atualizadas.
  • Linhas atualizadas com os valores que poderiam causar erros de conversão de dados, são atualizados para os valores válidos em vez dos mais próximos.

Exemplos de comandos UPDATE no MySQL

Vamos praticar com um par de exemplos no banco de dados exemplo MySQL.

UPDATE para atualizar uma única coluna em uma tabela

Neste exemplo, vamos atualizar o e-mail de Fulano de Tal para o novo email: fulano.de.tal@provedor.com.

Em primeiro lugar, para se certificar de que nós atualizamos o e-mail com sucesso, consultamos o e-mail de Fulano de Tal usando a instrução SELECT da seguinte forma:

 SELECT firstname, lastname, email FROM colaborador WHERE idColab = 1056 

Em segundo lugar, podemos atualizar seu e-mail atual para o novo e-mail fulano.de.tal.silva@provedor.com a instrução UPDATE como a seguinte consulta:

 UPDATE colaborador SET email = ‘fulano.de.tal.silva@provedor.com’ WHERE idColab = 1056 

Porque nós só queremos atualizar o registro de Fulano, por isso usamos a cláusula WHERE para especificar registro ID dele que é 1056. A cláusula SET define o valor da coluna de e-mail para o novo e-mail.

Em terceiro lugar, nós executamos a instrução SELECT novamente para verificar a mudança:

 SELECT firstname, lastname, email FROM colaborador WHERE idColab = 1056 

É possível atualizar vários registros fazendo a junção de tabelas?

Sim, isso é perfeitamente possível. Observe que para fazer a junção é necessário que haja um campo em comum entre as duas, ou seja, um campo que faça a ligação de uma tabela com a outra. 

E como ficaria a sintaxe deste comando?

 UPDATE TABELA a JOIN TABLEB b ON a.colA = b.colB SET a.columnToUpdate = [VALOR] 

Examinando a instrução UPDATE acima em maiores detalhes, temos:

  • Logo após a instrução UPDATE, temos a tabela principal que será atualizada.
  • Abaixo, temos a junção de outra tabela, onde utilizamos a instrução JOIN, juntando a tabela A com a B de acordo que as duas tenham a mesma chave. Este JOIN pode ser; INNER, LEFT, RIGHT, ETC...depende da sua necessidade e entendimento, mas isso é assunto para outro artigo.
  • E finalmente o SET que determina os nomes das colunas da tabela e os novos valores. Lembrando que os novos valores podem ser valores literais, números, resultado de expressões ou subconsultas.

E fazer atualização dos registros a partir de um SELECT, também é possível?

Sim, isso também é possível. O importante para este tipo de procedimento é prestar bem atenção nos nomes dos campos da tabela e mais, na sequência das informações. Elas precisam estar na mesma ordem para que não haja problemas, senão podem ocorrer erros, ou pior, trocar a ordem das informações, veja:

 UPDATE TABELA_A SET CAMPO1 = ( SELECT CAMPO_TABELA_B FROM TABELA_B WHERE id = [VALOR] ) 

Perceba que na TABELA B, foi solicitado somente um campo, sendo este campo o valor que eu quero obter. Se eu errar e colocar uma coluna qualquer, pode haver erro, mas somente se os tipos de dados forem diferentes. Portanto nesse passo é preciso prestar atenção para buscar os dados que realmente deseja.

Consigo fazer o UPDATE com JOIN?

Podemos fazer quase tudo que imaginamos, basta pesquisar e sempre tomar cuidado com instruções novas. Sempre é bom fazer um BACKUP antes fazer testes, principalmente com comandos que ainda não temos domínio e, pode ter certeza, mesmo tendo domínio, uma distração você pode botar tudo a perder e ter uma enorme dor de cabeça, portanto sempre é bom ter um BACKUP, fica a dica.

E a SINTAXE para atualizar os registros com junção de tabelas ficaria da seguinte forma:

 update TABELA_A a inner join TABELA_B b on a.ID_A = b.ID_B set a.CAMPO1 = [VALOR], a.CAMPO2 = [VALOR], a.CAMPO3 = [VALOR] WHERE b.CAMPO_TABELA_B = [VALOR] 

Estamos atualizando a TABELA A, onde a TABELA B tenha um campo em comum com A e utilizando o SET para determinar os nomes das colunas da tabela e os novos valores, restringindo os valores de acordo com a intrução WHERE, onde somente serão atualizados os registros com valores que sejam iguais a TABELA B.

Perceba também, que logo após o nome da tabela tem um PREFIXO, ou seja, podemos dar um nome qualquer para ela, onde a partir deste momento sempre que precisarmos nos referir a ela, basta usarmos o PREFIXO (a, b, etc...)

Faça testes, mas lembre-se, sempre fazendo BACKUP antes para não perder seus dados, sejam eles de qualquer importância.

Neste tutorial, você aprendeu como usar a instrução UPDATE do MySQL para atualizar dados em tabelas de banco de dados de várias formas. Assim terminamos mais um artigo. Dúvidas, críticas ou sugestões comentem abaixo. laugh

Veja Também:

Artigos Relacionados a categoria: MySql

Olá, deixe seu comentário para UPDATE a partir de um SELECT, JOIN

Enviando Comentário Fechar :/

...AINDA NÃO VIU NOSSO PORTFÓLIO?

Se ainda não viu nosso Portfólio e quer conhecer um pouco mais... aproveite e veja agora mesmo e tenha um site de qualidade para o seu negócio!

[contato]
Ver o Portfólio Agora