UPDATE [LOW_PRIORITY] [IGNORE] nome_tabela SET nome_coluna1=expr1 [, nome_coluna2=expr2 ...] [WHERE definição_where] [ORDER BY ...] [LIMIT row_count] ou UPDATE [LOW_PRIORITY] [IGNORE] nome_tabela [, nome_tabela ...] SET nome_coluna1=expr1 [, nome_coluna2=expr2 ...] [WHERE definição_where]
UPDATE
atualiza uma coluna em registros de
tabelas existentes com novos valores. A cláusula
SET
indica quais colunas modificar e os
valores que devem ser dados. A cláusula
WHERE
i, se dada, especifica quais linhas
devem ser atualizadas. Senão todas as linhas são atualizadas.
Se a cláusula ORDER BY
é especificada, as
linhas serão atualizada na ordem especificada.
Se você especificar a palavra-chave
LOW_PRIORITY
, a execução de
UPDATE
e atrasada até que nenhum outro
cliente esteja lendo da tabela.
Se você especificar a palavra-chave IGNORE
,
a instrução não será abortada memso se nós obtermos erros
de chaves duplicadas durante a atualização. Linhas que causem
conflitos não serão atualizadas.
Se você acessa um coluna de nome_tabela
em
uma expressão, UPDATE
utiliza o valor atual
da coluna. Por exemplo, a seguinte instrução define a coluna
age
com o valor atual mais um:
mysql> UPDATE persondata SET age=age+1;
Atribuiçãoes UPDATE
são avaliadas da
esquerda para a direitat. Por exemplo, a seguinte instrução
dobra a coluna age
e então a incrementa:
mysql> UPDATE persondata SET age=age*2, age=age+1;
Se você define uma coluna ao valor que ela possui atualmente, o MySQL notará isto é não irá atualizá-la.
UPDATE
retorna o número de linhas que forma
realmente alteradas. No MySQL Versão 3.22 ou posterior, a
função mysql_info()
da API C retorna o
número de linhas encontradas e atualizadas e o número de
avisos que ocorreram durante o UPDATE
.
A partir do MySQL versão 3.23, você pode utilizar
LIMIT row_count
para restringir o escopo do
UPDATE
. Uma cláusula
LIMIT
funciona da seguinte forma:
Antes do MySQL 4.0.13, LIMIT
é uma
restrição que afeta as linhas. A instrução para assim
que altera row_count
linhas que
satisfaçam a cláusula WHERE
.
Da versão 4.0.13 em diante, LIMIT
é uma
restrição de linhas correspondentes. A instrução para
assim que ela encontrar row_count
linhas
que satisfaçam a cláusula WHERE
, tendo
elas sido alteradas ou não.
Se uma cláusula ORDER BY
é utilizada
(disponível no MySQL 4.0.0), as linhas serão atualizadas nesta
ordem. Isto só é util em conjunto com
LIMIT
.
A partir da MySQL Versão 4.0.4, você também pode realizar
operações UPDATE
que cobrem múltiplas
tabelas:
UPDATE items,month SET items.price=month.price WHERE items.id=month.id;
O exemplo mostra um inner join usando o operador de vírgula,
mas instruções UPDATE
multi-tabelas podem
usar qualquer tipo de join permitida na instrução
SELECT
, como LEFT JOIN
.
Nota: você não pode utilizar ORDER BY
ou
LIMIT
com multi-tabelas
UPDATE
.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.