Sintaxe UPDATE
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 alterarow_count
linhas que satisfaçam a cláusulaWHERE
. - Da versão 4.0.13 em diante,
LIMIT
é uma restrição de linhas correspondentes. A instrução para assim que ela encontrarrow_count
linhas que satisfaçam a cláusulaWHERE
, tendo elas sido alteradas ou não.
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
.