SQL/Manipulação de Dados/DML — INSERT, UPDATE, DELETE
SQL⏱ ~2 min de leitura

DML — INSERT, UPDATE, DELETE

Insira, atualize e remova dados com segurança

DML (Data Manipulation Language) é o conjunto de comandos para inserir, atualizar e remover dados: INSERT INTO, UPDATE e DELETE. Ao contrário do SELECT, esses comandos modificam o estado do banco de dados.

INSERT INTO adiciona novas linhas. UPDATE modifica linhas existentes — sempre use WHERE para evitar atualizar toda a tabela acidentalmente. DELETE remove linhas — sempre use WHERE, ou use TRUNCATE se quiser limpar toda a tabela (mais rápido, sem rollback).

Em produção, comandos DML devem ser executados dentro de transações (BEGIN/COMMIT/ROLLBACK) para garantir consistência. Sempre teste com SELECT antes de executar UPDATE ou DELETE.

Exemplo.java
-- INSERT — uma linha
INSERT INTO clientes (nome, email, cidade)
VALUES ('Maria Silva', 'maria@email.com', 'São Paulo');

-- INSERT — múltiplas linhas
INSERT INTO produtos (nome, preco, estoque)
VALUES
    ('Teclado', 199.90, 50),
    ('Mouse', 89.90, 100),
    ('Monitor', 1299.00, 20);

-- INSERT a partir de SELECT
INSERT INTO clientes_vip (cliente_id, desde)
SELECT id, NOW()
FROM clientes
WHERE total_compras > 10000;

-- UPDATE — SEMPRE use WHERE!
UPDATE produtos
SET preco = preco * 1.10,  -- aumento de 10%
    atualizado_em = NOW()
WHERE categoria = 'eletronicos';

-- UPDATE com JOIN (PostgreSQL/MySQL)
UPDATE funcionarios f
SET salario = salario * 1.15
FROM departamentos d
WHERE f.departamento_id = d.id
AND d.nome = 'Engenharia';

-- DELETE — SEMPRE use WHERE!
DELETE FROM sessoes WHERE expira_em < NOW();

-- Testar antes de deletar (boa prática)
SELECT COUNT(*) FROM sessoes WHERE expira_em < NOW();
-- ok? então execute:
DELETE FROM sessoes WHERE expira_em < NOW();

-- TRUNCATE — limpa toda a tabela (sem WHERE, sem rollback fácil)
TRUNCATE TABLE log_temporario;

-- Transação para segurança
BEGIN;
UPDATE contas SET saldo = saldo - 500 WHERE id = 1;
UPDATE contas SET saldo = saldo + 500 WHERE id = 2;
COMMIT;  -- ou ROLLBACK em caso de erro
💡 Dica pro

Antes de qualquer UPDATE ou DELETE em produção, execute um SELECT com as mesmas condições do WHERE para confirmar quantas linhas serão afetadas.

Recompensa+35 XP+exercícios