{"id":11335,"date":"2023-09-26T04:22:19","date_gmt":"2023-09-26T07:22:19","guid":{"rendered":"https:\/\/www.homehost.com.br\/blog\/?p=11335"},"modified":"2026-08-09T07:56:32","modified_gmt":"2026-08-09T10:56:32","slug":"update-sql","status":"publish","type":"post","link":"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/","title":{"rendered":"UPDATE SQL: como atualizar dados no MySQL com seguran\u00e7a"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>O <code>UPDATE<\/code> \u00e9 o comando SQL que altera dados j\u00e1 existentes numa tabela. A estrutura \u00e9 simples \u2014 voc\u00ea diz qual tabela, quais colunas mudam, e quais linhas devem ser afetadas \u2014, mas ele carrega o erro mais destrutivo do SQL: esquecer a cl\u00e1usula <code>WHERE<\/code>. Sem ela, o comando altera todas as linhas da tabela, e n\u00e3o h\u00e1 como desfazer fora de uma transa\u00e7\u00e3o.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Este guia cobre a sintaxe, os casos que aparecem no dia a dia \u2014 atualizar com base em outra tabela, usar condi\u00e7\u00f5es, aplicar valores diferentes por linha \u2014 e, principalmente, a pr\u00e1tica que evita o desastre: <strong>rodar um <code>SELECT<\/code> antes<\/strong>.<\/p>\n\n\n\n<div style=\"border:1px solid #f0d9a8; border-left:4px solid #e0a800; background:#fffaf0; border-radius:8px; padding:18px 22px; margin:24px 0; font-family:Arial, Helvetica, sans-serif;\">\n<div style=\"font-weight:700; color:#8a6d00; margin-bottom:6px; text-transform:uppercase; letter-spacing:.05em; font-size:14px;\">&#x26a0;&#xfe0f; Leia antes de executar qualquer UPDATE<\/div>\n<p style=\"color:#8a6d00; line-height:1.65; margin:0 0 10px;\">Um <code>UPDATE<\/code> sem <code>WHERE<\/code> altera <strong>todas as linhas da tabela<\/strong>. N\u00e3o h\u00e1 confirma\u00e7\u00e3o, n\u00e3o h\u00e1 aviso, e o comando \u00e9 executado em milissegundos. Numa tabela de dez mil clientes, todos passam a ter o mesmo nome.<\/p>\n<p style=\"color:#8a6d00; line-height:1.65; margin:0;\">Antes de rodar, fa\u00e7a duas coisas: <strong>backup do banco<\/strong> e <strong>teste com SELECT<\/strong>. As duas levam menos de um minuto, e s\u00e3o a diferen\u00e7a entre um ajuste e um incidente.<\/p>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><div id=\"ez-toc-container\" class=\"ez-toc-v2_0_72 ez-toc-wrap-center counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Conte\u00fado<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/#Sintaxe_do_UPDATE\" title=\"Sintaxe do UPDATE\">Sintaxe do UPDATE<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/#A_pratica_que_evita_desastre_teste_com_SELECT_primeiro\" title=\"A pr\u00e1tica que evita desastre: teste com SELECT primeiro\">A pr\u00e1tica que evita desastre: teste com SELECT primeiro<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/#UPDATE_com_varias_colunas\" title=\"UPDATE com v\u00e1rias colunas\">UPDATE com v\u00e1rias colunas<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/#Condicoes_no_WHERE\" title=\"Condi\u00e7\u00f5es no WHERE\">Condi\u00e7\u00f5es no WHERE<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/#Atualizar_com_base_no_valor_atual\" title=\"Atualizar com base no valor atual\">Atualizar com base no valor atual<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/#E_se_o_registro_nao_existir\" title=\"E se o registro n\u00e3o existir?\">E se o registro n\u00e3o existir?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/#Valores_diferentes_por_linha_com_CASE\" title=\"Valores diferentes por linha, com CASE\">Valores diferentes por linha, com CASE<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/#UPDATE_com_JOIN_atualizar_usando_outra_tabela\" title=\"UPDATE com JOIN: atualizar usando outra tabela\">UPDATE com JOIN: atualizar usando outra tabela<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/#UPDATE_com_subconsulta\" title=\"UPDATE com subconsulta\">UPDATE com subconsulta<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/#Limitar_quantas_linhas_serao_alteradas\" title=\"Limitar quantas linhas ser\u00e3o alteradas\">Limitar quantas linhas ser\u00e3o alteradas<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/#Transacoes_como_desfazer_um_UPDATE\" title=\"Transa\u00e7\u00f5es: como desfazer um UPDATE\">Transa\u00e7\u00f5es: como desfazer um UPDATE<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/#Boas_praticas\" title=\"Boas pr\u00e1ticas\">Boas pr\u00e1ticas<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/#Perguntas_frequentes\" title=\"Perguntas frequentes\">Perguntas frequentes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/#Veja_tambem\" title=\"Veja tamb\u00e9m\">Veja tamb\u00e9m<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/#Conclusao\" title=\"Conclus\u00e3o\">Conclus\u00e3o<\/a><\/li><\/ul><\/nav><\/div>\n<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Sintaxe_do_UPDATE\"><\/span>Sintaxe do UPDATE<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<div style=\"background:#0b3d91; border-radius:8px; padding:16px 18px; margin:18px 0; font-family:'Courier New', Courier, monospace; overflow-x:auto;\">\n<code style=\"color:#f1f5f9; font-size:13.5px; line-height:1.8;\">\nUPDATE nome_da_tabela<br>\nSET coluna1 = valor1, coluna2 = valor2<br>\nWHERE condi\u00e7\u00e3o;\n<\/code>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Tr\u00eas partes, e todas importam:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><code>UPDATE nome_da_tabela<\/code><\/strong> \u2014 qual tabela ser\u00e1 alterada. \u00c9 obrigat\u00f3rio.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><code>SET coluna = valor<\/code><\/strong> \u2014 quais colunas mudam e para qu\u00ea. Voc\u00ea pode alterar quantas quiser, separadas por v\u00edrgula. Os valores podem ser um texto entre aspas, um n\u00famero, uma express\u00e3o (<code>preco = preco * 1.1<\/code>) ou o resultado de uma fun\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><code>WHERE condi\u00e7\u00e3o<\/code><\/strong> \u2014 quais linhas ser\u00e3o afetadas. Tecnicamente \u00e9 opcional; na pr\u00e1tica, trat\u00e1-la como obrigat\u00f3ria evita o pior erro poss\u00edvel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Um exemplo real:<\/strong><\/p>\n\n\n\n<div style=\"background:#0b3d91; border-radius:8px; padding:16px 18px; margin:18px 0; font-family:'Courier New', Courier, monospace; overflow-x:auto;\">\n<code style=\"color:#f1f5f9; font-size:13.5px; line-height:1.8;\">\nUPDATE alunos<br>\nSET nome = 'Maria Silva'<br>\nWHERE id_aluno = 1;\n<\/code>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Isso altera o nome apenas do aluno com ID 1. Sem a \u00faltima linha, alteraria o nome de <strong>todos<\/strong> os alunos da tabela.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"A_pratica_que_evita_desastre_teste_com_SELECT_primeiro\"><\/span>A pr\u00e1tica que evita desastre: teste com SELECT primeiro<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Esta \u00e9 a t\u00e9cnica mais valiosa deste guia, e leva dez segundos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Antes de executar o <code>UPDATE<\/code>, escreva a mesma consulta como <code>SELECT<\/code><\/strong> \u2014 mantendo o <code>WHERE<\/code> id\u00eantico \u2014 e veja quais linhas ele retorna. S\u00e3o exatamente as que seriam alteradas.<\/p>\n\n\n\n<div style=\"background:#0b3d91; border-radius:8px; padding:16px 18px; margin:18px 0; font-family:'Courier New', Courier, monospace; overflow-x:auto;\">\n<code style=\"color:#f1f5f9; font-size:13.5px; line-height:1.8;\">\n-- 1. Primeiro, veja o que seria afetado<br>\nSELECT * FROM alunos WHERE id_aluno = 1;<br>\n<br>\n-- 2. Se o resultado estiver certo, execute a altera\u00e7\u00e3o<br>\nUPDATE alunos SET nome = 'Maria Silva' WHERE id_aluno = 1;\n<\/code>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Se o <code>SELECT<\/code> retornar mil linhas quando voc\u00ea esperava uma, o <code>WHERE<\/code> est\u00e1 errado \u2014 e voc\u00ea descobriu isso <strong>antes<\/strong> de alterar mil registros.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>No MySQL Workbench, h\u00e1 uma prote\u00e7\u00e3o adicional:<\/strong> o <em>Safe Update Mode<\/em> vem ativo por padr\u00e3o e recusa qualquer <code>UPDATE<\/code> sem <code>WHERE<\/code> que use uma chave. Se voc\u00ea recebe o erro 1175, \u00e9 essa prote\u00e7\u00e3o agindo \u2014 e vale entender por que ela existe antes de desativ\u00e1-la.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"UPDATE_com_varias_colunas\"><\/span>UPDATE com v\u00e1rias colunas<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Alterar m\u00faltiplas colunas de uma vez \u00e9 mais eficiente do que executar comandos separados:<\/p>\n\n\n\n<div style=\"background:#0b3d91; border-radius:8px; padding:16px 18px; margin:18px 0; font-family:'Courier New', Courier, monospace; overflow-x:auto;\">\n<code style=\"color:#f1f5f9; font-size:13.5px; line-height:1.8;\">\nUPDATE clientes<br>\nSET nome = 'Jo\u00e3o Souza',<br>\n&nbsp;&nbsp;&nbsp;&nbsp;email = 'joao@exemplo.com.br',<br>\n&nbsp;&nbsp;&nbsp;&nbsp;cidade = 'Rio de Janeiro'<br>\nWHERE id_cliente = 1;\n<\/code>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O banco percorre a tabela uma vez s\u00f3, em vez de tr\u00eas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Condicoes_no_WHERE\"><\/span>Condi\u00e7\u00f5es no WHERE<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O <code>WHERE<\/code> aceita as mesmas condi\u00e7\u00f5es de um <code>SELECT<\/code>. As mais usadas:<\/p>\n\n\n\n<div style=\"overflow-x:auto; margin:24px 0;\">\n<table style=\"width:100%; border-collapse:collapse; font-family:Arial, Helvetica, sans-serif; font-size:14.5px; min-width:600px;\">\n<thead>\n<tr style=\"background-color:#1a73e8; color:#ffffff; text-align:left;\">\n<th style=\"padding:12px 14px; border:1px solid #1a73e8;\">Condi\u00e7\u00e3o<\/th>\n<th style=\"padding:12px 14px; border:1px solid #1a73e8;\">O que faz<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"background-color:#f7fafd;\">\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\"><code>WHERE id = 5<\/code><\/td>\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\">Uma linha espec\u00edfica<\/td>\n<\/tr>\n<tr style=\"background-color:#ffffff;\">\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\"><code>WHERE id IN (1, 3, 7)<\/code><\/td>\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\">V\u00e1rias linhas espec\u00edficas<\/td>\n<\/tr>\n<tr style=\"background-color:#f7fafd;\">\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\"><code>WHERE id BETWEEN 1 AND 50<\/code><\/td>\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\">Um intervalo<\/td>\n<\/tr>\n<tr style=\"background-color:#ffffff;\">\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\"><code>WHERE cidade = 'Recife' AND ativo = 1<\/code><\/td>\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\">Duas condi\u00e7\u00f5es, ambas verdadeiras<\/td>\n<\/tr>\n<tr style=\"background-color:#f7fafd;\">\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\"><code>WHERE email LIKE '%@gmail.com'<\/code><\/td>\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\">Correspond\u00eancia parcial de texto<\/td>\n<\/tr>\n<tr style=\"background-color:#ffffff;\">\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\"><code>WHERE data_cadastro &lt; '2020-01-01'<\/code><\/td>\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\">Compara\u00e7\u00e3o de datas<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Atualizar_com_base_no_valor_atual\"><\/span>Atualizar com base no valor atual<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Um caso muito comum: aumentar pre\u00e7os, somar pontos, incrementar contadores. O valor novo depende do valor que j\u00e1 est\u00e1 l\u00e1.<\/p>\n\n\n\n<div style=\"background:#0b3d91; border-radius:8px; padding:16px 18px; margin:18px 0; font-family:'Courier New', Courier, monospace; overflow-x:auto;\">\n<code style=\"color:#f1f5f9; font-size:13.5px; line-height:1.8;\">\n-- Aumentar todos os pre\u00e7os em 10%<br>\nUPDATE produtos<br>\nSET preco = preco * 1.10<br>\nWHERE categoria = 'eletronicos';<br>\n<br>\n-- Somar 1 ao contador de visitas<br>\nUPDATE artigos<br>\nSET visitas = visitas + 1<br>\nWHERE id = 42;\n<\/code>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"E_se_o_registro_nao_existir\"><\/span>E se o registro n\u00e3o existir?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O <code>UPDATE<\/code> s\u00f3 altera linhas que j\u00e1 existem \u2014 se a condi\u00e7\u00e3o do <code>WHERE<\/code> n\u00e3o encontrar nada, o comando roda sem erro e sem efeito. Quando voc\u00ea precisa <strong>inserir se n\u00e3o existir, atualizar se existir<\/strong>, o MySQL tem um comando pr\u00f3prio:<\/p>\n\n\n\n<div style=\"background:#0b3d91; border-radius:8px; padding:16px 18px; margin:18px 0; font-family:'Courier New', Courier, monospace; overflow-x:auto;\">\n<code style=\"color:#f1f5f9; font-size:13.5px; line-height:1.8;\">\nINSERT INTO estoque (id_produto, quantidade)<br>\nVALUES (42, 10)<br>\nON DUPLICATE KEY UPDATE quantidade = quantidade + 10;\n<\/code>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Se o produto 42 ainda n\u00e3o estiver na tabela, ele \u00e9 inserido com quantidade 10. Se j\u00e1 estiver, a quantidade dele aumenta em 10. Um comando s\u00f3, sem precisar consultar antes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Uma condi\u00e7\u00e3o:<\/strong> isso depende de a tabela ter uma <strong>chave prim\u00e1ria ou \u00edndice \u00fanico<\/strong> na coluna usada para identificar o registro. \u00c9 o que permite ao MySQL saber que houve duplicidade.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Existe tamb\u00e9m o <code>REPLACE INTO<\/code>, que parece fazer o mesmo \u2014 mas ele <strong>apaga a linha existente e insere uma nova<\/strong>, o que zera as colunas que voc\u00ea n\u00e3o informou e dispara os gatilhos de exclus\u00e3o. Na pr\u00e1tica, o <code>ON DUPLICATE KEY UPDATE<\/code> \u00e9 quase sempre a escolha certa.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Valores_diferentes_por_linha_com_CASE\"><\/span>Valores diferentes por linha, com CASE<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quando cada grupo de linhas precisa de um valor distinto, o <code>CASE<\/code> evita executar v\u00e1rios comandos:<\/p>\n\n\n\n<div style=\"background:#0b3d91; border-radius:8px; padding:16px 18px; margin:18px 0; font-family:'Courier New', Courier, monospace; overflow-x:auto;\">\n<code style=\"color:#f1f5f9; font-size:13.5px; line-height:1.8;\">\nUPDATE funcionarios<br>\nSET salario = CASE<br>\n&nbsp;&nbsp;&nbsp;&nbsp;WHEN cargo = 'junior' THEN salario * 1.10<br>\n&nbsp;&nbsp;&nbsp;&nbsp;WHEN cargo = 'pleno' THEN salario * 1.08<br>\n&nbsp;&nbsp;&nbsp;&nbsp;WHEN cargo = 'senior' THEN salario * 1.05<br>\n&nbsp;&nbsp;&nbsp;&nbsp;ELSE salario<br>\nEND<br>\nWHERE ativo = 1;\n<\/code>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>O <code>ELSE<\/code> \u00e9 importante:<\/strong> sem ele, linhas que n\u00e3o correspondem a nenhuma condi\u00e7\u00e3o recebem <code>NULL<\/code> \u2014 apagando o valor que estava l\u00e1.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"UPDATE_com_JOIN_atualizar_usando_outra_tabela\"><\/span>UPDATE com JOIN: atualizar usando outra tabela<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O caso mais \u00fatil no dia a dia, e o que a maioria dos guias n\u00e3o cobre. Serve quando o valor novo est\u00e1 em outra tabela.<\/p>\n\n\n\n<div style=\"background:#0b3d91; border-radius:8px; padding:16px 18px; margin:18px 0; font-family:'Courier New', Courier, monospace; overflow-x:auto;\">\n<code style=\"color:#f1f5f9; font-size:13.5px; line-height:1.8;\">\nUPDATE pedidos p<br>\nJOIN clientes c ON p.id_cliente = c.id<br>\nSET p.cidade_entrega = c.cidade<br>\nWHERE p.cidade_entrega IS NULL;\n<\/code>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Isso preenche a cidade de entrega dos pedidos que est\u00e3o sem ela, buscando o dado no cadastro do cliente. Nosso guia sobre <a href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/join-sql\/\">JOIN no SQL<\/a> explica os tipos de jun\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Aten\u00e7\u00e3o \u00e0 sintaxe:<\/strong> no <a href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/o-que-e-mysql\/\">MySQL<\/a>, o <code>JOIN<\/code> vem <strong>antes<\/strong> do <code>SET<\/code>. Em outros bancos a ordem \u00e9 diferente \u2014 no PostgreSQL e no SQL Server usa-se <code>UPDATE ... SET ... FROM ...<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"UPDATE_com_subconsulta\"><\/span>UPDATE com subconsulta<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Alternativa ao JOIN, \u00fatil quando a condi\u00e7\u00e3o depende de um c\u00e1lculo:<\/p>\n\n\n\n<div style=\"background:#0b3d91; border-radius:8px; padding:16px 18px; margin:18px 0; font-family:'Courier New', Courier, monospace; overflow-x:auto;\">\n<code style=\"color:#f1f5f9; font-size:13.5px; line-height:1.8;\">\n-- Marcar como VIP quem j\u00e1 gastou mais de mil reais<br>\nUPDATE clientes<br>\nSET categoria = 'VIP'<br>\nWHERE id IN (<br>\n&nbsp;&nbsp;&nbsp;&nbsp;SELECT id_cliente FROM pedidos<br>\n&nbsp;&nbsp;&nbsp;&nbsp;GROUP BY id_cliente<br>\n&nbsp;&nbsp;&nbsp;&nbsp;HAVING SUM(valor) &gt; 1000<br>\n);\n<\/code>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Aqui a vantagem do teste com <code>SELECT<\/code> fica evidente: rode a subconsulta sozinha primeiro e veja quantos clientes ela retorna.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Limitar_quantas_linhas_serao_alteradas\"><\/span>Limitar quantas linhas ser\u00e3o alteradas<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O <code>LIMIT<\/code> restringe o n\u00famero de linhas afetadas \u2014 \u00fatil para processar aos poucos ou testar em produ\u00e7\u00e3o com cautela:<\/p>\n\n\n\n<div style=\"background:#0b3d91; border-radius:8px; padding:16px 18px; margin:18px 0; font-family:'Courier New', Courier, monospace; overflow-x:auto;\">\n<code style=\"color:#f1f5f9; font-size:13.5px; line-height:1.8;\">\nUPDATE newsletter<br>\nSET status = 'enviado'<br>\nWHERE status = 'pendente'<br>\nORDER BY data_cadastro<br>\nLIMIT 100;\n<\/code>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Combinado com <code>ORDER BY<\/code>, voc\u00ea controla <strong>quais<\/strong> cem linhas. Sem ele, o banco escolhe arbitrariamente. Veja tamb\u00e9m <a href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/order-by-sql\/\">ORDER BY no SQL<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Transacoes_como_desfazer_um_UPDATE\"><\/span>Transa\u00e7\u00f5es: como desfazer um UPDATE<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A \u00fanica forma de reverter um <code>UPDATE<\/code> sem restaurar backup \u00e9 execut\u00e1-lo dentro de uma transa\u00e7\u00e3o \u2014 e n\u00e3o confirmar.<\/p>\n\n\n\n<div style=\"background:#0b3d91; border-radius:8px; padding:16px 18px; margin:18px 0; font-family:'Courier New', Courier, monospace; overflow-x:auto;\">\n<code style=\"color:#f1f5f9; font-size:13.5px; line-height:1.8;\">\nSTART TRANSACTION;<br>\n<br>\nUPDATE clientes SET categoria = 'VIP' WHERE total_gasto &gt; 1000;<br>\n<br>\n-- Confira o resultado antes de decidir<br>\nSELECT * FROM clientes WHERE categoria = 'VIP';<br>\n<br>\n-- Se estiver certo:<br>\nCOMMIT;<br>\n<br>\n-- Se estiver errado:<br>\nROLLBACK;\n<\/code>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Duas condi\u00e7\u00f5es para isso funcionar:<\/strong> as tabelas precisam usar o motor <strong>InnoDB<\/strong> (o padr\u00e3o desde 2010), e o <code>autocommit<\/code> precisa estar desativado durante a transa\u00e7\u00e3o \u2014 o <code>START TRANSACTION<\/code> j\u00e1 cuida disso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Depois do <code>COMMIT<\/code>, n\u00e3o h\u00e1 mais volta.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Boas_praticas\"><\/span>Boas pr\u00e1ticas<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Sempre use <code>WHERE<\/code>.<\/strong> Trate-o como obrigat\u00f3rio, mesmo quando a inten\u00e7\u00e3o for alterar tudo \u2014 nesse caso, escreva uma condi\u00e7\u00e3o sempre verdadeira, para deixar expl\u00edcito que foi intencional.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Teste com <code>SELECT<\/code> antes.<\/strong> Mesma consulta, mesmo <code>WHERE<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Fa\u00e7a backup antes de altera\u00e7\u00f5es em massa.<\/strong> Nosso guia sobre <a href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/como-gerenciar-um-banco-de-dados-mysql-usando-o-phpmyadmin\/\">gerenciar o banco pelo phpMyAdmin<\/a> mostra como exportar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Use transa\u00e7\u00f5es<\/strong> em altera\u00e7\u00f5es importantes, para poder reverter.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Prefira consultas preparadas<\/strong> em aplica\u00e7\u00f5es. Concatenar valores vindos do usu\u00e1rio direto no SQL \u00e9 a porta de entrada para inje\u00e7\u00e3o de SQL.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Indexe as colunas usadas no <code>WHERE<\/code>.<\/strong> Um <code>UPDATE<\/code> que filtra por uma coluna sem \u00edndice percorre a tabela inteira.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Altere s\u00f3 o necess\u00e1rio.<\/strong> Incluir colunas que n\u00e3o mudam gera escrita desnecess\u00e1ria e pode acionar triggers \u00e0 toa.<\/p>\n\n\n\n<div style=\"max-width:760px; margin:32px auto; background:linear-gradient(135deg,#1a73e8 0%,#0b3d91 100%); border-radius:16px; padding:32px 28px; font-family:Arial, Helvetica, sans-serif; color:#fff; box-shadow:0 10px 30px rgba(26,115,232,.25);\">\n<div style=\"display:flex; align-items:flex-start; gap:16px; flex-wrap:wrap;\">\n<div style=\"flex:0 0 auto; display:inline-flex; align-items:center; justify-content:center; width:52px; height:52px; border-radius:12px; background:rgba(255,255,255,.18);\">\n<svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#fff\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\"><\/ellipse><path d=\"M3 5v14c0 1.7 4 3 9 3s9-1.3 9-3V5\"><\/path><path d=\"M3 12c0 1.7 4 3 9 3s9-1.3 9-3\"><\/path><\/svg>\n<\/div>\n<div style=\"flex:1 1 320px; min-width:260px;\">\n<div style=\"font-weight:800; line-height:1.25; margin-bottom:8px; font-size:19px;\">Bancos MySQL prontos, com phpMyAdmin no painel<\/div>\n<p style=\"margin:0 0 18px; line-height:1.6; color:#dbe7fb;\">Todo plano da Homehost inclui bancos de dados com phpMyAdmin acess\u00edvel pelo painel \u2014 de onde voc\u00ea exporta um backup em poucos cliques antes de rodar qualquer comando destrutivo. InnoDB por padr\u00e3o, para transa\u00e7\u00f5es com ROLLBACK. Servidor no Brasil, NVMe e suporte em portugu\u00eas, a partir de R$ 7,90\/m\u00eas.<\/p>\n<a href=\"https:\/\/www.homehost.com.br\/hospedagem-de-sites\/\" style=\"display:inline-flex; align-items:center; gap:8px; background:#fff; color:#1a73e8; font-weight:700; text-decoration:none; padding:13px 26px; border-radius:10px; box-shadow:0 4px 12px rgba(0,0,0,.15);\">\nVer planos de hospedagem\n<svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#1a73e8\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 12h14M13 6l6 6-6 6\"><\/path><\/svg>\n<\/a>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Perguntas_frequentes\"><\/span>Perguntas frequentes<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Como usar o UPDATE no SQL?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A estrutura \u00e9 <code>UPDATE tabela SET coluna = valor WHERE condi\u00e7\u00e3o;<\/code>. O <code>UPDATE<\/code> indica a tabela, o <code>SET<\/code> define o que muda, e o <code>WHERE<\/code> delimita quais linhas ser\u00e3o afetadas. Sempre inclua o <code>WHERE<\/code> \u2014 sem ele, o comando altera todas as linhas da tabela.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>O que acontece se eu esquecer o WHERE?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Todas as linhas da tabela recebem o novo valor, sem confirma\u00e7\u00e3o nem aviso. Numa tabela de dez mil clientes, todos ficam com o mesmo nome. A recupera\u00e7\u00e3o s\u00f3 \u00e9 poss\u00edvel se voc\u00ea tiver um backup ou se o comando estiver dentro de uma transa\u00e7\u00e3o n\u00e3o confirmada.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Como desfazer um UPDATE?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00f3 h\u00e1 duas formas: restaurar um backup, ou executar o comando dentro de uma transa\u00e7\u00e3o e usar <code>ROLLBACK<\/code> antes do <code>COMMIT<\/code>. Depois de confirmada, a altera\u00e7\u00e3o \u00e9 definitiva. Por isso a recomenda\u00e7\u00e3o de testar com <code>SELECT<\/code> antes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Como saber quantas linhas ser\u00e3o afetadas antes de executar?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Escreva a mesma consulta como <code>SELECT<\/code>, mantendo o <code>WHERE<\/code> id\u00eantico, e veja quantas linhas retornam. S\u00e3o exatamente as que o <code>UPDATE<\/code> alteraria. \u00c9 o teste mais simples e o que mais evita problemas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Posso atualizar v\u00e1rias colunas de uma vez?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sim, e \u00e9 mais eficiente que executar comandos separados. Basta separar as atribui\u00e7\u00f5es por v\u00edrgula no <code>SET<\/code>, como em <code>SET nome = 'Jo\u00e3o', email = 'joao@exemplo.com'<\/code>. O banco percorre a tabela uma \u00fanica vez.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Como atualizar uma tabela com dados de outra?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Com <code>UPDATE<\/code> combinado a <code>JOIN<\/code>. No MySQL, a sintaxe \u00e9 <code>UPDATE tabela1 JOIN tabela2 ON condi\u00e7\u00e3o SET tabela1.coluna = tabela2.coluna WHERE ...<\/code>. Note que no MySQL o <code>JOIN<\/code> vem antes do <code>SET<\/code>, diferente do PostgreSQL e do SQL Server, que usam <code>UPDATE ... SET ... FROM<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>O que \u00e9 o erro 1175 no MySQL?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 o Safe Update Mode do MySQL Workbench, que impede <code>UPDATE<\/code> e <code>DELETE<\/code> sem uma cl\u00e1usula <code>WHERE<\/code> que use uma chave. \u00c9 uma prote\u00e7\u00e3o contra altera\u00e7\u00f5es acidentais em massa. Antes de desativ\u00e1-la, vale confirmar se o seu comando realmente precisa afetar todas as linhas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Como aumentar um valor sem saber qual \u00e9 o atual?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use a pr\u00f3pria coluna na express\u00e3o: <code>SET preco = preco * 1.10<\/code> aumenta o pre\u00e7o em 10% independentemente do valor atual, e <code>SET visitas = visitas + 1<\/code> incrementa um contador. O banco l\u00ea o valor existente e aplica o c\u00e1lculo linha a linha.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>O UPDATE insere o registro se ele n\u00e3o existir?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o. O <code>UPDATE<\/code> s\u00f3 altera linhas existentes \u2014 se o <code>WHERE<\/code> n\u00e3o encontrar nada, o comando roda sem efeito e sem erro. Para inserir ou atualizar conforme o caso, use <code>INSERT ... ON DUPLICATE KEY UPDATE<\/code>, que exige uma chave prim\u00e1ria ou \u00edndice \u00fanico na tabela.<\/p>\n\n\n\n<script type=\"application\/ld+json\">\n{\n\"@context\": \"https:\/\/schema.org\",\n\"@type\": \"FAQPage\",\n\"mainEntity\": [\n{\"@type\":\"Question\",\"name\":\"Como usar o UPDATE no SQL?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"A estrutura \u00e9 UPDATE tabela SET coluna = valor WHERE condi\u00e7\u00e3o. O UPDATE indica a tabela, o SET define o que muda, e o WHERE delimita quais linhas ser\u00e3o afetadas. Sempre inclua o WHERE, porque sem ele o comando altera todas as linhas da tabela.\"}},\n{\"@type\":\"Question\",\"name\":\"O que acontece se eu esquecer o WHERE?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Todas as linhas da tabela recebem o novo valor, sem confirma\u00e7\u00e3o nem aviso. Numa tabela de dez mil clientes, todos ficam com o mesmo nome. A recupera\u00e7\u00e3o s\u00f3 \u00e9 poss\u00edvel se voc\u00ea tiver um backup ou se o comando estiver dentro de uma transa\u00e7\u00e3o n\u00e3o confirmada.\"}},\n{\"@type\":\"Question\",\"name\":\"Como desfazer um UPDATE?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"S\u00f3 h\u00e1 duas formas: restaurar um backup, ou executar o comando dentro de uma transa\u00e7\u00e3o e usar ROLLBACK antes do COMMIT. Depois de confirmada, a altera\u00e7\u00e3o \u00e9 definitiva. Por isso a recomenda\u00e7\u00e3o de testar com SELECT antes.\"}},\n{\"@type\":\"Question\",\"name\":\"Como saber quantas linhas ser\u00e3o afetadas antes de executar?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Escreva a mesma consulta como SELECT, mantendo o WHERE id\u00eantico, e veja quantas linhas retornam. S\u00e3o exatamente as que o UPDATE alteraria. \u00c9 o teste mais simples e o que mais evita problemas.\"}},\n{\"@type\":\"Question\",\"name\":\"Posso atualizar v\u00e1rias colunas de uma vez?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Sim, e \u00e9 mais eficiente que executar comandos separados. Basta separar as atribui\u00e7\u00f5es por v\u00edrgula no SET. O banco percorre a tabela uma \u00fanica vez.\"}},\n{\"@type\":\"Question\",\"name\":\"O UPDATE insere o registro se ele n\u00e3o existir?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"N\u00e3o. O UPDATE s\u00f3 altera linhas existentes, ent\u00e3o se o WHERE n\u00e3o encontrar nada o comando roda sem efeito e sem erro. Para inserir ou atualizar conforme o caso, use INSERT com ON DUPLICATE KEY UPDATE, que exige uma chave prim\u00e1ria ou \u00edndice \u00fanico na tabela.\"}},\n{\"@type\":\"Question\",\"name\":\"Como atualizar uma tabela com dados de outra?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Com UPDATE combinado a JOIN. No MySQL, a sintaxe \u00e9 UPDATE tabela1 JOIN tabela2 ON condi\u00e7\u00e3o SET tabela1.coluna = tabela2.coluna. Note que no MySQL o JOIN vem antes do SET, diferente do PostgreSQL e do SQL Server, que usam UPDATE, SET e FROM.\"}},\n{\"@type\":\"Question\",\"name\":\"O que \u00e9 o erro 1175 no MySQL?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"\u00c9 o Safe Update Mode do MySQL Workbench, que impede UPDATE e DELETE sem uma cl\u00e1usula WHERE que use uma chave. \u00c9 uma prote\u00e7\u00e3o contra altera\u00e7\u00f5es acidentais em massa. Antes de desativ\u00e1-la, vale confirmar se o seu comando realmente precisa afetar todas as linhas.\"}},\n{\"@type\":\"Question\",\"name\":\"Como aumentar um valor sem saber qual \u00e9 o atual?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Use a pr\u00f3pria coluna na express\u00e3o: SET preco = preco * 1.10 aumenta o pre\u00e7o em 10% independentemente do valor atual, e SET visitas = visitas + 1 incrementa um contador. O banco l\u00ea o valor existente e aplica o c\u00e1lculo linha a linha.\"}}\n]\n}\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Veja_tambem\"><\/span>Veja tamb\u00e9m<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sobre outros comandos SQL, veja <a href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/o-que-e-sql\/\">SELECT<\/a>, <a href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/join-sql\/\">JOIN<\/a>, <a href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/order-by-sql\/\">ORDER BY<\/a> e <a href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/delete-into-sql\/\">DELETE<\/a>. Para gerenciar o banco pelo navegador, veja <a href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/como-gerenciar-um-banco-de-dados-mysql-usando-o-phpmyadmin\/\">phpMyAdmin<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Conclusao\"><\/span>Conclus\u00e3o<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O <code>UPDATE<\/code> \u00e9 um comando de tr\u00eas linhas que exige mais cuidado do que aparenta, porque n\u00e3o pergunta nada antes de executar e n\u00e3o avisa depois. A diferen\u00e7a entre um ajuste rotineiro e um incidente costuma ser o <code>WHERE<\/code> \u2014 e o h\u00e1bito de test\u00e1-lo com um <code>SELECT<\/code> antes. Para altera\u00e7\u00f5es que valem alguma coisa, use transa\u00e7\u00f5es: rodar dentro de <code>START TRANSACTION<\/code>, conferir o resultado, e s\u00f3 ent\u00e3o dar <code>COMMIT<\/code> \u00e9 o que transforma um comando irrevers\u00edvel em algo que voc\u00ea pode desfazer.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Como usar o UPDATE no MySQL sem estragar a tabela: sintaxe, WHERE, JOIN, subconsultas e a pr\u00e1tica que evita desastre \u2014 testar com SELECT antes de executar.<\/p>\n","protected":false},"author":1,"featured_media":17198,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_helpful_status":1,"_lmt_disableupdate":"","_lmt_disable":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[30],"tags":[],"class_list":["post-11335","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mysql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>UPDATE SQL: como atualizar dados no MySQL com seguran\u00e7a | Homehost<\/title>\n<meta name=\"description\" content=\"Como usar o UPDATE no MySQL sem estragar a tabela: sintaxe, WHERE, JOIN, subconsultas e a pr\u00e1tica que evita desastre \u2014 testar com SELECT antes de executar.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"UPDATE SQL: como atualizar dados no MySQL com seguran\u00e7a | Homehost\" \/>\n<meta property=\"og:description\" content=\"Como usar o UPDATE no MySQL sem estragar a tabela: sintaxe, WHERE, JOIN, subconsultas e a pr\u00e1tica que evita desastre \u2014 testar com SELECT antes de executar.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/\" \/>\n<meta property=\"og:site_name\" content=\"Homehost\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Homehost\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-09-26T07:22:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-09T10:56:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/09\/update-no-mysql-capa.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1672\" \/>\n\t<meta property=\"og:image:height\" content=\"941\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Gustavo Gallas\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Homehost\" \/>\n<meta name=\"twitter:site\" content=\"@Homehost\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Gustavo Gallas\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/tutoriais\\\/mysql\\\/update-sql\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/tutoriais\\\/mysql\\\/update-sql\\\/\"},\"author\":{\"name\":\"Gustavo Gallas\",\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/df8002f43fc55e7f4e132abb2a6ddbc4\"},\"headline\":\"UPDATE SQL: como atualizar dados no MySQL com seguran\u00e7a\",\"datePublished\":\"2023-09-26T07:22:19+00:00\",\"dateModified\":\"2026-08-09T10:56:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/tutoriais\\\/mysql\\\/update-sql\\\/\"},\"wordCount\":1623,\"publisher\":{\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/tutoriais\\\/mysql\\\/update-sql\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/09\\\/update-no-mysql-capa.png\",\"articleSection\":[\"MySQL\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/tutoriais\\\/mysql\\\/update-sql\\\/\",\"url\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/tutoriais\\\/mysql\\\/update-sql\\\/\",\"name\":\"UPDATE SQL: como atualizar dados no MySQL com seguran\u00e7a | Homehost\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/tutoriais\\\/mysql\\\/update-sql\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/tutoriais\\\/mysql\\\/update-sql\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/09\\\/update-no-mysql-capa.png\",\"datePublished\":\"2023-09-26T07:22:19+00:00\",\"dateModified\":\"2026-08-09T10:56:32+00:00\",\"description\":\"Como usar o UPDATE no MySQL sem estragar a tabela: sintaxe, WHERE, JOIN, subconsultas e a pr\u00e1tica que evita desastre \u2014 testar com SELECT antes de executar.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/tutoriais\\\/mysql\\\/update-sql\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/tutoriais\\\/mysql\\\/update-sql\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/tutoriais\\\/mysql\\\/update-sql\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/09\\\/update-no-mysql-capa.png\",\"contentUrl\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/09\\\/update-no-mysql-capa.png\",\"width\":1672,\"height\":941,\"caption\":\"MySQL Update\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/tutoriais\\\/mysql\\\/update-sql\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"UPDATE SQL: como atualizar dados no MySQL com seguran\u00e7a\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/\",\"name\":\"Homehost\",\"description\":\"Hospedagem De Sites\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/#organization\",\"name\":\"Homehost\",\"url\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/10\\\/logo-detalhes.png\",\"contentUrl\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/10\\\/logo-detalhes.png\",\"width\":150,\"height\":48,\"caption\":\"Homehost\"},\"image\":{\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/Homehost\\\/\",\"https:\\\/\\\/x.com\\\/Homehost\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/df8002f43fc55e7f4e132abb2a6ddbc4\",\"name\":\"Gustavo Gallas\",\"description\":\"Analista de sistemas, formado pela PUC-Rio. Programador, gestor de redes e diretor da empresa Homehost. Pai do B\u00f3ris, seu pet de estima\u00e7\u00e3o. Gosta de rock'n'roll, cerveja artesanal e de escrever sobre assuntos t\u00e9cnicos. Contato: gustavo.blog@homehost.com.br\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"UPDATE SQL: como atualizar dados no MySQL com seguran\u00e7a | Homehost","description":"Como usar o UPDATE no MySQL sem estragar a tabela: sintaxe, WHERE, JOIN, subconsultas e a pr\u00e1tica que evita desastre \u2014 testar com SELECT antes de executar.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/","og_locale":"pt_BR","og_type":"article","og_title":"UPDATE SQL: como atualizar dados no MySQL com seguran\u00e7a | Homehost","og_description":"Como usar o UPDATE no MySQL sem estragar a tabela: sintaxe, WHERE, JOIN, subconsultas e a pr\u00e1tica que evita desastre \u2014 testar com SELECT antes de executar.","og_url":"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/","og_site_name":"Homehost","article_publisher":"https:\/\/www.facebook.com\/Homehost\/","article_published_time":"2023-09-26T07:22:19+00:00","article_modified_time":"2026-08-09T10:56:32+00:00","og_image":[{"width":1672,"height":941,"url":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/09\/update-no-mysql-capa.png","type":"image\/png"}],"author":"Gustavo Gallas","twitter_card":"summary_large_image","twitter_creator":"@Homehost","twitter_site":"@Homehost","twitter_misc":{"Escrito por":"Gustavo Gallas","Est. tempo de leitura":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/#article","isPartOf":{"@id":"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/"},"author":{"name":"Gustavo Gallas","@id":"https:\/\/www.homehost.com.br\/blog\/#\/schema\/person\/df8002f43fc55e7f4e132abb2a6ddbc4"},"headline":"UPDATE SQL: como atualizar dados no MySQL com seguran\u00e7a","datePublished":"2023-09-26T07:22:19+00:00","dateModified":"2026-08-09T10:56:32+00:00","mainEntityOfPage":{"@id":"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/"},"wordCount":1623,"publisher":{"@id":"https:\/\/www.homehost.com.br\/blog\/#organization"},"image":{"@id":"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/09\/update-no-mysql-capa.png","articleSection":["MySQL"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/","url":"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/","name":"UPDATE SQL: como atualizar dados no MySQL com seguran\u00e7a | Homehost","isPartOf":{"@id":"https:\/\/www.homehost.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/#primaryimage"},"image":{"@id":"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/09\/update-no-mysql-capa.png","datePublished":"2023-09-26T07:22:19+00:00","dateModified":"2026-08-09T10:56:32+00:00","description":"Como usar o UPDATE no MySQL sem estragar a tabela: sintaxe, WHERE, JOIN, subconsultas e a pr\u00e1tica que evita desastre \u2014 testar com SELECT antes de executar.","breadcrumb":{"@id":"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/#primaryimage","url":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/09\/update-no-mysql-capa.png","contentUrl":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/09\/update-no-mysql-capa.png","width":1672,"height":941,"caption":"MySQL Update"},{"@type":"BreadcrumbList","@id":"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/www.homehost.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"UPDATE SQL: como atualizar dados no MySQL com seguran\u00e7a"}]},{"@type":"WebSite","@id":"https:\/\/www.homehost.com.br\/blog\/#website","url":"https:\/\/www.homehost.com.br\/blog\/","name":"Homehost","description":"Hospedagem De Sites","publisher":{"@id":"https:\/\/www.homehost.com.br\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.homehost.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.homehost.com.br\/blog\/#organization","name":"Homehost","url":"https:\/\/www.homehost.com.br\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.homehost.com.br\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2022\/10\/logo-detalhes.png","contentUrl":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2022\/10\/logo-detalhes.png","width":150,"height":48,"caption":"Homehost"},"image":{"@id":"https:\/\/www.homehost.com.br\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Homehost\/","https:\/\/x.com\/Homehost"]},{"@type":"Person","@id":"https:\/\/www.homehost.com.br\/blog\/#\/schema\/person\/df8002f43fc55e7f4e132abb2a6ddbc4","name":"Gustavo Gallas","description":"Analista de sistemas, formado pela PUC-Rio. Programador, gestor de redes e diretor da empresa Homehost. Pai do B\u00f3ris, seu pet de estima\u00e7\u00e3o. Gosta de rock'n'roll, cerveja artesanal e de escrever sobre assuntos t\u00e9cnicos. Contato: gustavo.blog@homehost.com.br"}]}},"modified_by":"ad_hmhst","jetpack_featured_media_url":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/09\/update-no-mysql-capa.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/posts\/11335","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/comments?post=11335"}],"version-history":[{"count":17,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/posts\/11335\/revisions"}],"predecessor-version":[{"id":17202,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/posts\/11335\/revisions\/17202"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/media\/17198"}],"wp:attachment":[{"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/media?parent=11335"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/categories?post=11335"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/tags?post=11335"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}