Decodificando o Comando SQL UPDATE

Aprenda a usar o comando SQL UPDATE para atualizar registros em uma tabela de banco de dados.

Como desenvolvedor, você deve se sentir confortável trabalhando com bancos de dados relacionais. SQL (ou Linguagem de Consulta Estruturada) é uma linguagem amigável para iniciantes que é intuitiva para aprender e possui uma sintaxe simples. O SQL permite criar objetos de banco de dados e consultar tabelas de bancos de dados relacionais.

Você pode executar consultas SQL para criar, ler, atualizar e excluir registros em uma tabela de banco de dados. Você deve estar familiarizado com o fato de que essas operações são chamadas coletivamente de operações CRUD.

Para atualizar os registros armazenados em uma tabela de banco de dados, você pode executar o comando UPDATE no SQL.

Neste tutorial, você aprenderá:

  • A sintaxe do comando UPDATE
  • Como atualizar registros com base em uma condição específica ou várias condições encadeadas usando operadores lógicos
  • Advertência comum a ser observada ao executar o comando SQL UPDATE

Sintaxe do Comando SQL UPDATE

A sintaxe do comando SQL UPDATE é:

UPDATE table_name
SET column = new_value
WHERE condition;

A consulta acima atualiza a coluna para todos os registros em que a condição é verdadeira.

Para atualizar várias colunas (ou campos), use o comando SQL UPDATE da seguinte forma:

UPDATE table_name
SET column_1 = new_value_1, column_2 = new_value_2, ..., column_k = new_value_k
WHERE condition;

Lembre-se que em um banco de dados relacional:

  • A tabela representa uma entidade.
  • As linhas da tabela são os registros e representam uma instância da entidade.
  • As colunas também são chamadas de campos ou atributos. Neste tutorial, usaremos colunas e campos de forma intercambiável.

Exemplos de uso do comando SQL UPDATE

Agora vamos pegar alguns exemplos.

  Como ler cabeçalhos de mensagens no Outlook

Pré-requisitos

Antes de começar a codificar:

  • Este tutorial usa SQLite. Então você vai precisar ter SQLite e Navegador de banco de dados SQLite (recomendado) para codificar junto. Observe que você também pode usar MySQL ou PostgreSQL.
  • Se você deseja replicar o exemplo, você precisa do Python e do Pacote Faker Python também.

Criando uma tabela de banco de dados com registros

Se você quiser codificar junto com este tutorial, poderá executar o trecho de código a seguir para criar e conectar-se a um banco de dados do cliente customer_db.db. Observe que usamos a biblioteca Faker Python para gerar dados sintéticos para inserir na tabela de clientes:

# main.py

import sqlite3
from faker import Faker
import random

# connect to the db
conn = sqlite3.connect('customer_db.db')
cur = conn.cur()

# create a database table
cur.execute('''CREATE TABLE customers (
                  customerID INTEGER PRIMARY KEY,
                  name TEXT,
                  city TEXT,
                  email TEXT,
                  num_orders INTEGER,
                  discount INTEGER DEFAULT 2)''')


# create a Faker object 
fake = Faker()
Faker.seed(42)

for _ in range(15):
    name = fake.name()
    city = fake.city()
    d = fake.domain_name()
    email = f"{name[:2]}.{city[:2]}@{d}"
    num_orders = random.choice(range(200))
    db_cursor.execute('INSERT INTO customers (name, city, email, num_orders) 
    VALUES (?,?,?,?)', (name,city,email,num_orders))

# commit the transaction 
conn.commit()
cur.close()
conn.close()

📑 Para que este código funcione sem erros, verifique se você possui o Python 3.7 (ou uma versão posterior) e falsificador instalado em seu ambiente de desenvolvimento. Você pode instalar o pacote Faker Python usando pip:

pip install faker

Se você já tiver um banco de dados ao qual possa se conectar e uma tabela de banco de dados que possa consultar, também poderá usá-lo como preferir.

Executando nossa primeira consulta SQL

A tabela clientes possui os seguintes campos:

  • customerID: O customerID é a chave primária que nos ajuda a identificar exclusivamente um registro em uma tabela de banco de dados.
  • nome: O nome do cliente
  • cidade: A cidade a que pertencem.
  • e-mail: O endereço de e-mail deles.
  • num_orders: O número de pedidos que eles fizeram.
  • desconto: A porcentagem de desconto, um número inteiro com um valor padrão de 2. Como o campo de desconto tem um valor padrão, não precisamos inserir um valor para ele ao preencher a tabela do banco de dados.
  É ruim ter seu PC de mesa no chão?

📝 Você pode executar as consultas e visualizar os resultados usando o cliente de linha de comando SQLite. Ou você pode usar o navegador de banco de dados SQLite.

Apresentarei as saídas do SQLite DB Browser, pois são fáceis de interpretar.

Execute a seguinte consulta para obter todos os registros na tabela de clientes:

SELECT * FROM customers;

Na prática, você deve evitar usar SELECT * a menos que seja necessário. Mas para este exemplo, vamos usá-lo porque temos apenas 15 registros e não muitos campos.

Atualizando registros com base em uma única condição

Agora que sabemos como nossa tabela se parece, vamos executar algumas consultas UPDATE para atualizar os registros com base na condição necessária.

📋 Observação: após executar as instruções UPDATE, executaremos SELECT * FROM clientes para ver os registros atualizados.

Atualizando um único campo

Primeiro, vamos atualizar o campo cidade do registro com customerID=7:

UPDATE customers
SET city='Codeshire'
WHERE customerID=7;

Vamos selecionar todas as colunas e registros da tabela clientes:

SELECT * FROM customers;

Vemos que o campo cidade de Danielle Ford (customerID=7) foi atualizado.

Atualizando vários campos

No exemplo anterior, atualizamos apenas um campo, ou seja, a cidade do registro correspondente ao customerID 7. Mas também podemos atualizar vários campos usando a sintaxe que aprendemos.

Aqui atualizamos a cidade e o campo de e-mail correspondente ao customerID 1:

UPDATE customers
SET city='East Carlisle',email="[email protected]"
WHERE customerID=1;

A seguir, executamos:

SELECT * FROM customers;

E aqui está a saída:

Atualizando vários registros

Como usamos o customerID, que é a chave primária que identifica exclusivamente um registro de cliente, as consultas que executamos até agora atualizaram apenas um dos registros.

No entanto, se a condição for verdadeira para mais de um registro na tabela, a execução do comando SQL update atualizará todos os registros correspondentes.

Tome esta consulta por exemplo:

UPDATE customers 
SET discount=10
WHERE num_orders > 170;

Agora execute esta consulta:

SELECT * FROM customers;

Aqui está a saída:

A execução do comando SQL update acima modifica três registros. Todos eles têm num_orders maior que 170 e agora têm um valor de desconto de 10.

  Como extrair e modificar ícones em um Mac

Atualizando registros com base em várias condições

Até agora, a cláusula WHERE tinha uma condição simples, mas é comum que o critério de filtragem tenha várias condições encadeadas por operadores lógicos.

Para entender isso, vamos definir o desconto para 5 com base em duas condições:

  • cidade LIKE ‘Novo%’: esta condição verifica e inclui aqueles registros onde o campo cidade começa com o Novo, e
  • num_orders > 100 filtros baseados no número de pedidos para incluir apenas os registros para os quais o número de pedidos é maior que 100.

A instrução UPDATE tem a seguinte aparência:

UPDATE customers
SET DISCOUNT=5
WHERE city LIKE 'New%' AND num_orders>100;

Observe que agora temos duas condições na cláusula WHERE — encadeadas pelo operador lógico AND. E apenas os registros para os quais ambas as condições são verdadeiras são atualizados.

Em seguida, execute esta consulta e observe a saída:

SELECT * FROM customers;

Conforme visto na saída, o campo de desconto para os registros para os quais ambas as condições acima são verdadeiras são atualizados:

Advertência comum ao usar o comando SQL UPDATE

Em todas as instruções UPDATE executadas até agora, incluímos a cláusula WHERE.

Por exemplo, você gostaria de atualizar o desconto para 25 para um determinado cliente. E em sua consulta de atualização, você esquece de incluir a cláusula WHERE com o customerID para filtrar:

UPDATE customers
SET DISCOUNT=25;

Agora execute:

SELECT * FROM customers;

Você verá que todos os registros da tabela estão atualizados. Este pode não ser o comportamento que você deseja.

⚠ Portanto, lembre-se de incluir a cláusula WHERE quando quiser atualizar um subconjunto de registros com base em uma condição. Se você deseja atualizar um campo específico para todos os registros, pode omitir a cláusula WHERE.

Neste exemplo, digamos que você tenha a venda da Black Friday chegando e deseja oferecer a todos os seus clientes um desconto de 25%. Então, executar a consulta acima fará sentido.

Conclusão

Aqui está um resumo do que você aprendeu:

  • Quando você deseja atualizar registros em uma tabela de banco de dados, pode usar o comando SQL UPDATE.
  • A instrução SQL UPDATE normalmente inclui a cláusula WHERE com a condição que determina o subconjunto de registros (linhas da tabela) a serem atualizados.
  • Omitir a cláusula WHERE na instrução UPDATE atualiza todos os registros. Portanto, você deve ter cuidado para não omitir a cláusula WHERE se a atualização de todas as linhas da tabela não for o comportamento desejado.

Em seguida, verifique esta folha de dicas do SQL para referência rápida.