Sintaxe UPDATE
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 MariaDB notará isto é não irá atualizá-la.
UPDATE
retorna o número de linhas que forma realmente alteradas. Desde o MariaDB v3.22, 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 MariaDB 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 MariaDB 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.
Se uma cláusula ORDER BY
é utilizada (disponível no MariaDB 4.0.0), as linhas serão atualizadas nesta ordem. Isto só é util em conjunto com LIMIT
.
A partir da MariaDB 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
.