O UPDATE é o comando SQL que altera dados já existentes numa tabela. A estrutura é simples — você diz qual tabela, quais colunas mudam, e quais linhas devem ser afetadas —, mas ele carrega o erro mais destrutivo do SQL: esquecer a cláusula WHERE. Sem ela, o comando altera todas as linhas da tabela, e não há como desfazer fora de uma transação.
Este guia cobre a sintaxe, os casos que aparecem no dia a dia — atualizar com base em outra tabela, usar condições, aplicar valores diferentes por linha — e, principalmente, a prática que evita o desastre: rodar um SELECT antes.
Um UPDATE sem WHERE altera todas as linhas da tabela. Não há confirmação, não há aviso, e o comando é executado em milissegundos. Numa tabela de dez mil clientes, todos passam a ter o mesmo nome.
Antes de rodar, faça duas coisas: backup do banco e teste com SELECT. As duas levam menos de um minuto, e são a diferença entre um ajuste e um incidente.
Conteúdo
Sintaxe do UPDATE
UPDATE nome_da_tabela
SET coluna1 = valor1, coluna2 = valor2
WHERE condição;
Três partes, e todas importam:
UPDATE nome_da_tabela — qual tabela será alterada. É obrigatório.
SET coluna = valor — quais colunas mudam e para quê. Você pode alterar quantas quiser, separadas por vírgula. Os valores podem ser um texto entre aspas, um número, uma expressão (preco = preco * 1.1) ou o resultado de uma função.
WHERE condição — quais linhas serão afetadas. Tecnicamente é opcional; na prática, tratá-la como obrigatória evita o pior erro possível.
Um exemplo real:
UPDATE alunos
SET nome = 'Maria Silva'
WHERE id_aluno = 1;
Isso altera o nome apenas do aluno com ID 1. Sem a última linha, alteraria o nome de todos os alunos da tabela.
A prática que evita desastre: teste com SELECT primeiro
Esta é a técnica mais valiosa deste guia, e leva dez segundos.
Antes de executar o UPDATE, escreva a mesma consulta como SELECT — mantendo o WHERE idêntico — e veja quais linhas ele retorna. São exatamente as que seriam alteradas.
-- 1. Primeiro, veja o que seria afetado
SELECT * FROM alunos WHERE id_aluno = 1;
-- 2. Se o resultado estiver certo, execute a alteração
UPDATE alunos SET nome = 'Maria Silva' WHERE id_aluno = 1;
Se o SELECT retornar mil linhas quando você esperava uma, o WHERE está errado — e você descobriu isso antes de alterar mil registros.
No MySQL Workbench, há uma proteção adicional: o Safe Update Mode vem ativo por padrão e recusa qualquer UPDATE sem WHERE que use uma chave. Se você recebe o erro 1175, é essa proteção agindo — e vale entender por que ela existe antes de desativá-la.
UPDATE com várias colunas
Alterar múltiplas colunas de uma vez é mais eficiente do que executar comandos separados:
UPDATE clientes
SET nome = 'João Souza',
email = 'joao@exemplo.com.br',
cidade = 'Rio de Janeiro'
WHERE id_cliente = 1;
O banco percorre a tabela uma vez só, em vez de três.
Condições no WHERE
O WHERE aceita as mesmas condições de um SELECT. As mais usadas:
| Condição | O que faz |
|---|---|
WHERE id = 5 | Uma linha específica |
WHERE id IN (1, 3, 7) | Várias linhas específicas |
WHERE id BETWEEN 1 AND 50 | Um intervalo |
WHERE cidade = 'Recife' AND ativo = 1 | Duas condições, ambas verdadeiras |
WHERE email LIKE '%@gmail.com' | Correspondência parcial de texto |
WHERE data_cadastro < '2020-01-01' | Comparação de datas |
Atualizar com base no valor atual
Um caso muito comum: aumentar preços, somar pontos, incrementar contadores. O valor novo depende do valor que já está lá.
-- Aumentar todos os preços em 10%
UPDATE produtos
SET preco = preco * 1.10
WHERE categoria = 'eletronicos';
-- Somar 1 ao contador de visitas
UPDATE artigos
SET visitas = visitas + 1
WHERE id = 42;
E se o registro não existir?
O UPDATE só altera linhas que já existem — se a condição do WHERE não encontrar nada, o comando roda sem erro e sem efeito. Quando você precisa inserir se não existir, atualizar se existir, o MySQL tem um comando próprio:
INSERT INTO estoque (id_produto, quantidade)
VALUES (42, 10)
ON DUPLICATE KEY UPDATE quantidade = quantidade + 10;
Se o produto 42 ainda não estiver na tabela, ele é inserido com quantidade 10. Se já estiver, a quantidade dele aumenta em 10. Um comando só, sem precisar consultar antes.
Uma condição: isso depende de a tabela ter uma chave primária ou índice único na coluna usada para identificar o registro. É o que permite ao MySQL saber que houve duplicidade.
Existe também o REPLACE INTO, que parece fazer o mesmo — mas ele apaga a linha existente e insere uma nova, o que zera as colunas que você não informou e dispara os gatilhos de exclusão. Na prática, o ON DUPLICATE KEY UPDATE é quase sempre a escolha certa.
Valores diferentes por linha, com CASE
Quando cada grupo de linhas precisa de um valor distinto, o CASE evita executar vários comandos:
UPDATE funcionarios
SET salario = CASE
WHEN cargo = 'junior' THEN salario * 1.10
WHEN cargo = 'pleno' THEN salario * 1.08
WHEN cargo = 'senior' THEN salario * 1.05
ELSE salario
END
WHERE ativo = 1;
O ELSE é importante: sem ele, linhas que não correspondem a nenhuma condição recebem NULL — apagando o valor que estava lá.
UPDATE com JOIN: atualizar usando outra tabela
O caso mais útil no dia a dia, e o que a maioria dos guias não cobre. Serve quando o valor novo está em outra tabela.
UPDATE pedidos p
JOIN clientes c ON p.id_cliente = c.id
SET p.cidade_entrega = c.cidade
WHERE p.cidade_entrega IS NULL;
Isso preenche a cidade de entrega dos pedidos que estão sem ela, buscando o dado no cadastro do cliente. Nosso guia sobre JOIN no SQL explica os tipos de junção.
Atenção à sintaxe: no MySQL, o JOIN vem antes do SET. Em outros bancos a ordem é diferente — no PostgreSQL e no SQL Server usa-se UPDATE ... SET ... FROM ....
UPDATE com subconsulta
Alternativa ao JOIN, útil quando a condição depende de um cálculo:
-- Marcar como VIP quem já gastou mais de mil reais
UPDATE clientes
SET categoria = 'VIP'
WHERE id IN (
SELECT id_cliente FROM pedidos
GROUP BY id_cliente
HAVING SUM(valor) > 1000
);
Aqui a vantagem do teste com SELECT fica evidente: rode a subconsulta sozinha primeiro e veja quantos clientes ela retorna.
Limitar quantas linhas serão alteradas
O LIMIT restringe o número de linhas afetadas — útil para processar aos poucos ou testar em produção com cautela:
UPDATE newsletter
SET status = 'enviado'
WHERE status = 'pendente'
ORDER BY data_cadastro
LIMIT 100;
Combinado com ORDER BY, você controla quais cem linhas. Sem ele, o banco escolhe arbitrariamente. Veja também ORDER BY no SQL.
Transações: como desfazer um UPDATE
A única forma de reverter um UPDATE sem restaurar backup é executá-lo dentro de uma transação — e não confirmar.
START TRANSACTION;
UPDATE clientes SET categoria = 'VIP' WHERE total_gasto > 1000;
-- Confira o resultado antes de decidir
SELECT * FROM clientes WHERE categoria = 'VIP';
-- Se estiver certo:
COMMIT;
-- Se estiver errado:
ROLLBACK;
Duas condições para isso funcionar: as tabelas precisam usar o motor InnoDB (o padrão desde 2010), e o autocommit precisa estar desativado durante a transação — o START TRANSACTION já cuida disso.
Depois do COMMIT, não há mais volta.
Boas práticas
Sempre use WHERE. Trate-o como obrigatório, mesmo quando a intenção for alterar tudo — nesse caso, escreva uma condição sempre verdadeira, para deixar explícito que foi intencional.
Teste com SELECT antes. Mesma consulta, mesmo WHERE.
Faça backup antes de alterações em massa. Nosso guia sobre gerenciar o banco pelo phpMyAdmin mostra como exportar.
Use transações em alterações importantes, para poder reverter.
Prefira consultas preparadas em aplicações. Concatenar valores vindos do usuário direto no SQL é a porta de entrada para injeção de SQL.
Indexe as colunas usadas no WHERE. Um UPDATE que filtra por uma coluna sem índice percorre a tabela inteira.
Altere só o necessário. Incluir colunas que não mudam gera escrita desnecessária e pode acionar triggers à toa.
Todo plano da Homehost inclui bancos de dados com phpMyAdmin acessível pelo painel — de onde você exporta um backup em poucos cliques antes de rodar qualquer comando destrutivo. InnoDB por padrão, para transações com ROLLBACK. Servidor no Brasil, NVMe e suporte em português, a partir de R$ 7,90/mês.
Ver planos de hospedagemPerguntas frequentes
Como usar o UPDATE no SQL?
A estrutura é UPDATE tabela SET coluna = valor WHERE condição;. O UPDATE indica a tabela, o SET define o que muda, e o WHERE delimita quais linhas serão afetadas. Sempre inclua o WHERE — sem ele, o comando altera todas as linhas da tabela.
O que acontece se eu esquecer o WHERE?
Todas as linhas da tabela recebem o novo valor, sem confirmação nem aviso. Numa tabela de dez mil clientes, todos ficam com o mesmo nome. A recuperação só é possível se você tiver um backup ou se o comando estiver dentro de uma transação não confirmada.
Como desfazer um UPDATE?
Só há duas formas: restaurar um backup, ou executar o comando dentro de uma transação e usar ROLLBACK antes do COMMIT. Depois de confirmada, a alteração é definitiva. Por isso a recomendação de testar com SELECT antes.
Como saber quantas linhas serão afetadas antes de executar?
Escreva a mesma consulta como SELECT, mantendo o WHERE idêntico, e veja quantas linhas retornam. São exatamente as que o UPDATE alteraria. É o teste mais simples e o que mais evita problemas.
Posso atualizar várias colunas de uma vez?
Sim, e é mais eficiente que executar comandos separados. Basta separar as atribuições por vírgula no SET, como em SET nome = 'João', email = 'joao@exemplo.com'. O banco percorre a tabela uma única vez.
Como atualizar uma tabela com dados de outra?
Com UPDATE combinado a JOIN. No MySQL, a sintaxe é UPDATE tabela1 JOIN tabela2 ON condição SET tabela1.coluna = tabela2.coluna WHERE .... Note que no MySQL o JOIN vem antes do SET, diferente do PostgreSQL e do SQL Server, que usam UPDATE ... SET ... FROM.
O que é o erro 1175 no MySQL?
É o Safe Update Mode do MySQL Workbench, que impede UPDATE e DELETE sem uma cláusula WHERE que use uma chave. É uma proteção contra alterações acidentais em massa. Antes de desativá-la, vale confirmar se o seu comando realmente precisa afetar todas as linhas.
Como aumentar um valor sem saber qual é o atual?
Use a própria coluna na expressão: SET preco = preco * 1.10 aumenta o preço em 10% independentemente do valor atual, e SET visitas = visitas + 1 incrementa um contador. O banco lê o valor existente e aplica o cálculo linha a linha.
O UPDATE insere o registro se ele não existir?
Não. O UPDATE só altera linhas existentes — se o WHERE não encontrar nada, o comando roda sem efeito e sem erro. Para inserir ou atualizar conforme o caso, use INSERT ... ON DUPLICATE KEY UPDATE, que exige uma chave primária ou índice único na tabela.
Veja também
Sobre outros comandos SQL, veja SELECT, JOIN, ORDER BY e DELETE. Para gerenciar o banco pelo navegador, veja phpMyAdmin.
Conclusão
O UPDATE é um comando de três linhas que exige mais cuidado do que aparenta, porque não pergunta nada antes de executar e não avisa depois. A diferença entre um ajuste rotineiro e um incidente costuma ser o WHERE — e o hábito de testá-lo com um SELECT antes. Para alterações que valem alguma coisa, use transações: rodar dentro de START TRANSACTION, conferir o resultado, e só então dar COMMIT é o que transforma um comando irreversível em algo que você pode desfazer.