🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

【Tutorial de SQL UPDATE】Como Atualizar Dados Existentes com Segurança Usando SET e WHERE

Um usuário altera seu endereço de e-mail, o preço de um produto é revisado, o status de uma postagem de blog muda de "rascunho" para "publicado"—ao operar uma aplicação web, situações em que você precisa alterar dados previamente registrados ocorrem diariamente. O papel crucial de "reescrever dados existentes" é desempenhado pela instrução UPDATE do SQL.

A instrução UPDATE é um comando para atualizar um registro do banco de dados com novas informações. No entanto, embora este comando seja muito poderoso, ele também carrega o risco de que um único erro possa levar a um desastre irreversível. O fator que determina esse destino é a presença da cláusula WHERE.

Este artigo explicará desde o uso básico da instrução UPDATE até técnicas avançadas, como a atualização simultânea de várias colunas. E, acima de tudo, nosso principal objetivo é gravar em suas mentes a regra de ferro—"NUNCA se esqueça da cláusula WHERE". Vamos adquirir a habilidade de atualizar dados de forma segura e confiável enquanto experimentamos códigos que você pode copiar e colar.


Preparação: Vamos Preparar Nossos Dados de Usuário

Para experimentar as operações, primeiro precisamos de alguns dados de origem. Desta vez, vamos criar uma tabela simples de users para gerenciar informações de usuários e registrar alguns deles. Todos os exemplos neste artigo terão como alvo esta tabela.

-- Se a tabela users existir, exclua-a (para testes repetíveis)
DROP TABLE IF EXISTS users;

-- Crie uma nova tabela users
CREATE TABLE users (
  id INTEGER PRIMARY KEY,
  username TEXT NOT NULL,
  email TEXT NOT NULL,
  points INTEGER DEFAULT 0,
  last_login_date DATE
);

-- Insira dados iniciais
INSERT INTO users (id, username, email, points, last_login_date) VALUES
(1, 'Yamada Taro', 'yamada@example.com', 50, '2025-06-15'),
(2, 'Suzuki Hanako', 'suzuki@example.com', 120, '2025-06-20'),
(3, 'Tanaka Jiro', 'tanaka@example.com', 300, '2025-06-28'),
(4, 'Sato Misaki', 'sato@example.com', 550, '2025-06-30'),
(5, 'Ito Kenta', 'ito@example.com', 80, '2025-05-30');

Com isso, nossos dados para cinco usuários estão prontos para serem usados em operações de atualização.


O Mais Importante: O Terror de Esquecer a Cláusula `WHERE` (O Perigo de Atualizar Todos os Registros)

Antes de entrarmos no conteúdo principal, vamos começar com o pior erro que você pode cometer com uma instrução UPDATE. Ou seja, esquecer de incluir a cláusula WHERE.

A estrutura básica de uma instrução UPDATE é UPDATE nome_da_tabela SET nome_da_coluna = novo_valor WHERE condicao;. Esta cláusula WHERE é um dispositivo de segurança para restringir o alvo da atualização, especificando quais registros atualizar. Se você esquecer este dispositivo de segurança, o que você acha que vai acontecer?

Por exemplo, imagine que você está realizando uma campanha para definir os pontos de todos os usuários para 50 e, com pressa, executa a seguinte consulta.

-- 【NUNCA EXECUTE ISTO DE FORMA IMPRUDENTE!】Uma instrução UPDATE sem a cláusula WHERE
UPDATE users SET points = 50;

Esta consulta não tem cláusula WHERE. O banco de dados interpreta isso como "para todos os registros na tabela users, defina a coluna points como 50". Como resultado, os 550 pontos suados de Sato-san, juntamente com os dados de todos os outros usuários, serão impiedosamente sobrescritos para 50 pontos.

É como precisar falar com uma pessoa específica, mas em vez disso gritar 'Ei, você!' para todos na sala. Ao usar uma instrução UPDATE, sempre verifique duas vezes e especifique explicitamente o alvo da atualização com uma cláusula WHERE. Esta é a regra absoluta ao aprender a instrução UPDATE.


【O Básico】Atualizando um Único Registro Específico

Agora, vamos nos recompor e ver a maneira correta de usá-lo. O caso mais básico é atualizar um único registro específico usando uma chave primária (como id). Isso é seguro porque garante que o alvo seja precisamente um registro.

Cenário: "O usuário Tanaka com ID 3 alterou seu endereço de e-mail."

UPDATE users
SET email = 'jiro.tanaka@new-example.com'
WHERE id = 3;

Ao especificar WHERE id = 3, restringimos com precisão o alvo ao registro com ID 3. A cláusula SET reescreve o valor da coluna email para o novo endereço.

Vamos verificar se foi atualizado. Exibiremos apenas o usuário com ID 3 usando uma instrução SELECT.

SELECT * FROM users WHERE id = 3;

Resultado:

id | username    | email                       | points | last_login_date
---|-------------|-----------------------------|--------|----------------
3  | Tanaka Jiro | jiro.tanaka@new-example.com | 300    | 2025-06-28

Você pode ver que o e-mail foi atualizado corretamente. Esta é a maneira básica и mais segura de usar a instrução UPDATE.


【Aplicação 1】Atualizando Múltiplas Colunas Simultaneamente

Também é comum querer atualizar os valores de várias colunas de uma vez. Por exemplo, quando um usuário faz login, você pode querer atualizar tanto a data do último login quanto o saldo de pontos.

Você pode atualizar várias colunas de uma vez listando vários pares "nome_da_coluna = valor" na cláusula SET, separados por vírgulas (,).

Cenário: "A usuária Suzuki com ID 2 fez login, então atualize sua data de último login e adicione 10 pontos como bônus de login."

UPDATE users
SET 
  last_login_date = '2025-07-01',
  points = 130
WHERE
  id = 2;

Assim, você pode atualizar dados de forma eficiente listando várias alterações na cláusula SET.


【Aplicação 2】Atualizando Múltiplos Registros que Correspondem a uma Condição

A condição na cláusula WHERE не se limita à chave primária; você também pode usar os valores de outras colunas. Isso permite que você atualize vários registros que atendem a uma condição específica de uma só vez.

Cenário: "Dar um bônus de 100 pontos a todos os usuários que atualmente têm 300 ou mais pontos."

Neste caso, o alvo da atualização são os "usuários com points maiores ou iguais a 300". Além disso, o novo valor dos pontos será "os pontos atuais + 100". A instrução UPDATE permite que você use o valor atual da própria coluna no cálculo para a atualização.

UPDATE users
SET points = points + 100
WHERE points >= 300;

A execução desta consulta atualizará os pontos de Tanaka (ID 3, 300 pontos) e Sato (ID 4, 550 pontos) para 400 e 650, respectivamente. Esta é uma técnica muito prática usada com frequência para coisas como campanhas direcionadas a segmentos específicos de usuários.


【Playground Interativo】Experimente Atualizações Seguras de Dados Executando SQL no seu Navegador!

Agora, é hora de solidificar este conhecimento em uma habilidade. Copie todo o código HTML abaixo, salve-o como um arquivo tipo sql_update_test.html e abra-o no seu navegador. Seu próprio ambiente SQL pessoal será iniciado, pré-carregado com a tabela users que usamos neste artigo.

Primeiro, pratique a atualização de dados com segurança, certificando-se de usar a cláusula WHERE. Tente alterar os pontos de alguém ou atualizar um endereço de e-mail. A maneira mais rápida de melhorar é executar SELECT * FROM users; antes e depois da atualização para ver com seus próprios olhos como os resultados mudam.

<!DOCTYPE html>
<html lang="pt">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Playground Online da Instrução SQL UPDATE</title>
  <style>
    body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; line-height: 1.7; color: #333; max-width: 800px; margin: 2rem auto; padding: 0 1rem; }
    h1 { color: #2c3e50; }
    textarea { width: 100%; height: 180px; font-family: "SF Mono", "Consolas", monospace; font-size: 16px; padding: 12px; border: 1px solid #ccc; border-radius: 6px; box-sizing: border-box; margin-bottom: 1rem; }
    button { background-color: #f39c12; color: white; border: none; padding: 12px 22px; font-size: 16px; border-radius: 6px; cursor: pointer; transition: background-color 0.2s; }
    button:hover { background-color: #d35400; }
    button:disabled { background-color: #bdc3c7; cursor: not-allowed; }
    #result-container { margin-top: 2rem; border: 1px solid #ddd; padding: 1rem; border-radius: 6px; background: #fdfdfd; min-height: 50px; }
    #status-message { color: #27ae60; font-weight: bold; }
    #error-message { color: #e74c3c; font-weight: bold; }
    table { border-collapse: collapse; width: 100%; margin-top: 1rem; }
    th, td { border: 1px solid #ddd; padding: 10px; text-align: left; }
    th { background-color: #f2f2f2; }
    tr:nth-child(even) { background-color: #f9f9f9; }
  </style>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.10.3/sql-wasm.js"></script>
</head>
<body>

  <h1>Vamos Experimentar o SQL!</h1>
  <p>Digite uma instrução UPDATE ou SELECT na área de texto abaixo e clique no botão "Executar". Vamos tentar atualizar os pontos de Ito com ID=5!</p>

  <textarea id="sql-input">-- Verifique os dados do usuário com ID=5 antes da atualização
SELECT * FROM users WHERE id = 5;

-- Atualize os pontos de Ito com ID=5 para 200
UPDATE users
SET points = 200
WHERE id = 5;

-- Exiba todos os dados do usuário para confirmar a atualização
SELECT * FROM users;
  </textarea>
  
  <button id="execute-btn">Executar</button>
  
  <div id="result-container">
    <p id="status-message"></p>
    <p id="error-message"></p>
    <div id="result-output"></div>
  </div>

  <script>
    const sqlInput = document.getElementById('sql-input');
    const executeBtn = document.getElementById('execute-btn');
    const statusMsg = document.getElementById('status-message');
    const errorMsg = document.getElementById('error-message');
    const resultOutput = document.getElementById('result-output');

    let db;

    async function initDb() {
      executeBtn.disabled = true;
      executeBtn.textContent = 'Inicializando BD...';
      try {
        const SQL = await initSqlJs({
          locateFile: file => `https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.10.3/${file}`
        });
        db = new SQL.Database();
        
        const setupSql = `
          DROP TABLE IF EXISTS users;
          CREATE TABLE users (
            id INTEGER PRIMARY KEY,
            username TEXT NOT NULL,
            email TEXT NOT NULL,
            points INTEGER DEFAULT 0,
            last_login_date DATE
          );
          INSERT INTO users (id, username, email, points, last_login_date) VALUES
          (1, 'Yamada Taro', 'yamada@example.com', 50, '2025-06-15'),
          (2, 'Suzuki Hanako', 'suzuki@example.com', 120, '2025-06-20'),
          (3, 'Tanaka Jiro', 'tanaka@example.com', 300, '2025-06-28'),
          (4, 'Sato Misaki', 'sato@example.com', 550, '2025-06-30'),
          (5, 'Ito Kenta', 'ito@example.com', 80, '2025-05-30');
        `;
        db.run(setupSql);
        
        executeBtn.disabled = false;
        executeBtn.textContent = 'Executar';
        statusMsg.textContent = 'Pronto! Tente atualizar dados com uma instrução UPDATE e verifique os resultados com uma instrução SELECT.';

      } catch (err) {
        errorMsg.textContent = 'Falha ao inicializar o banco de dados: ' + err.message;
        console.error(err);
      }
    }

    function executeSql() {
      if (!db) return;
      
      const sql = sqlInput.value;
      statusMsg.textContent = '';
      errorMsg.textContent = '';
      resultOutput.innerHTML = '';

      try {
        const statements = sql.split(';').filter(s => s.trim() !== '');
        let lastResult;

        statements.forEach(stmt => {
          const trimmedStmt = stmt.trim();
          if (trimmedStmt.toUpperCase().startsWith('UPDATE') || trimmedStmt.toUpperCase().startsWith('INSERT') || trimmedStmt.toUpperCase().startsWith('DELETE')) {
            db.run(trimmedStmt);
            const changes = db.getRowsModified();
            statusMsg.innerHTML += `Consulta "${trimmedStmt.substring(0, 30)}..." executada, ${changes} linha(s) modificada(s).<br>`;
          } else {
             const results = db.exec(trimmedStmt);
             lastResult = results;
          }
        });

        if (lastResult && lastResult.length > 0) {
            lastResult.forEach(result => {
            const table = document.createElement('table');
            const thead = document.createElement('thead');
            const tbody = document.createElement('tbody');
            const headerRow = document.createElement('tr');
            result.columns.forEach(colName => {
                const th = document.createElement('th');
                th.textContent = colName;
                headerRow.appendChild(th);
            });
            thead.appendChild(headerRow);
            result.values.forEach(row => {
                const bodyRow = document.createElement('tr');
                row.forEach(cellValue => {
                const td = document.createElement('td');
                td.textContent = cellValue === null ? 'NULL' : cellValue;
                bodyRow.appendChild(td);
                });
                tbody.appendChild(bodyRow);
            });
            table.appendChild(thead);
            table.appendChild(tbody);
            resultOutput.appendChild(table);
            });
        }

      } catch (err) {
        errorMsg.textContent = 'Erro de SQL: ' + err.message;
        console.error(err);
      }
    }

    executeBtn.addEventListener('click', executeSql);
    
    initDb();
  </script>
</body>
</html>

Amigos do UPDATE: Operações CRUD

Ao dominar o UPDATE, você adquiriu o terceiro poder das operações básicas de dados conhecidas como CRUD.

Agora que você pode "criar", "ler" e "atualizar" dados, só falta "apagar" (DELETE). Assim que aprender isso, você será capaz de realizar todas as operações básicas do banco de dados. Você está quase na linha de chegada!


Conclusão

Neste artigo, aprendemos sobre a importância e o uso da instrução UPDATE para atualizar com segurança os dados existentes.

Se INSERT é o "nascimento" dos dados, então UPDATE rege seu "crescimento" e "mudança". É uma função indispensável para aplicações web dinâmicas, lidando com alterações de informações do usuário, atualizações de status e muito mais. Esteja sempre ciente da importância da cláusula WHERE como seu dispositivo de segurança e familiarize-se com as operações de atualização de dados. Quando usada corretamente, esta habilidade expandirá drasticamente o escopo das aplicações que você pode construir.