Banco de Dados I — 2026.2

Aula 7
DML: INSERT, UPDATE & DELETE

👨‍🏫 Prof. Gustavo Pinto 🏛️ UFPA 📅 14 de maio de 2026 🕣 7h30 – 9h10

Agenda de hoje

DDL vs DML — Revisão

DDL — Data Definition Language

Define a estrutura do banco.
Comandos: CREATE, ALTER, DROP, TRUNCATE

Opera sobre tabelas, colunas, índices, constraints.

DML — Data Manipulation Language

Manipula os dados dentro das tabelas.
Comandos: INSERT, UPDATE, DELETE

Opera sobre linhas. Pode ser revertido com ROLLBACK.

DDL muda o esquema; DML muda o conteúdo. Ambos precisam respeitar as constraints definidas.

INSERT INTO

-- Inserção simples (com nomes das colunas explícitos — boa prática)
INSERT INTO cliente (cpf, nome, email)
VALUES ('11111111111', 'Ana Silva', 'ana@email.com');

-- Inserção múltipla (todas as linhas numa só instrução)
INSERT INTO produto (descricao, preco) VALUES
    ('Notebook',  3500.00),
    ('Mouse',     80.00),
    ('Teclado',   150.00);

-- INSERT com SELECT (copiar linhas que atendem a um critério)
INSERT INTO clientes_vip (cpf, nome)
SELECT cpf, nome FROM cliente
WHERE total_compras > 10000;

UPDATE

-- Atualizar um campo específico
UPDATE produto
SET preco = 3200.00
WHERE codigo = 1;

-- Atualizar múltiplas colunas
UPDATE cliente
SET nome = 'Ana Costa', email = 'ana.costa@email.com'
WHERE cpf = '11111111111';

-- Aumento de 10% em todos os produtos
UPDATE produto
SET preco = preco * 1.10;

CUIDADO: UPDATE sem WHERE atualiza todas as linhas da tabela!

DELETE

-- Remover registro específico
DELETE FROM cliente
WHERE cpf = '11111111111';

-- Remover com condição composta
DELETE FROM pedido
WHERE data < '2025-01-01' AND status = 'cancelado';

-- SEM WHERE = apaga TUDO. Não há desfazer fora de uma transação.
DELETE FROM produto;

DELETE vs TRUNCATE

DELETE: linha a linha, suporta WHERE, pode ser revertido com ROLLBACK.
TRUNCATE: remove tudo de uma vez, mais rápido, reseta sequências.

Integridade referencial

DELETE falha se houver FK apontando para a linha — a menos que a FK tenha ON DELETE CASCADE ou SET NULL.

Transações: BEGIN, COMMIT, ROLLBACK

Uma transação é um conjunto de operações executadas como unidade indivisível — ou todas acontecem, ou nenhuma.

BEGIN;  -- inicia a transação

UPDATE conta SET saldo = saldo - 500 WHERE id = 1;  -- débito
UPDATE conta SET saldo = saldo + 500 WHERE id = 2;  -- crédito

COMMIT;   -- confirma as duas operações juntas
-- ROLLBACK desfaz tudo o que foi feito desde o BEGIN

No PostgreSQL, cada comando fora de um BEGIN já é auto-confirmado (auto-commit). Para desfazer, você precisa usar BEGIN antes.

Exercício Reflexivo

Pensando criticamente sobre DML

Discuta com um colega. Não existe resposta única — o objetivo é argumentar.

Questão 1

Uma empresa precisa remover dados de clientes inativos há 5 anos por obrigação legal (LGPD). Faz sentido usar DELETE ou há uma alternativa melhor? Como garantir que realmente foi removido?

Questão 2

Toda operação DML deveria estar dentro de uma transação? Ou existe custo nisso? Em que situações o overhead de BEGIN/COMMIT não vale a pena?

Laboratório Prático

Sistema de Biblioteca no DB Fiddle

Cole o DDL da Aula 5 no DB Fiddle (PostgreSQL) e execute os passos abaixo em sequência.

① Popular

Insira com INSERT múltiplo: 3 editoras, 4 autores, 6 livros, 4 membros e 5 empréstimos (2 já devolvidos, 3 em aberto).

② Atualizar

Registre a devolução dos 3 empréstimos em aberto (UPDATE dt_devolucao). Corrija o ano de um livro inserido errado. Atualize o e-mail de um membro.

③ Remover com segurança

Tente deletar uma editora que possui livros — observe o erro de FK. Remova primeiro os livros dependentes e então delete a editora. Envolva tudo em BEGIN / COMMIT.

Próxima Aula — 19/05 (Ter)

Laboratório
Criação Completa de um Banco