DELETE com USING e padrões seguros
Exclua linhas associadas a outras tabelas com DELETE ... USING e use transações + SELECT primeiro para verificar antes de operações destrutivas.
DELETE com USING e padrões seguros é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.
DELETE básico
Remova as linhas correspondentes:
DELETE FROM users WHERE id = 1;Sempre teste primeiro com SELECT
Antes de qualquer DELETE, use o mesmo WHERE com SELECT para confirmar a quantidade de linhas:
SELECT COUNT(*) FROM orders
WHERE status = 'cancelled' AND created_at < NOW() - INTERVAL '1 year';DELETE em uma transação
Envolva operações destrutivas em uma transação para poder usar ROLLBACK:
BEGIN;
DELETE FROM orders WHERE status = 'cancelled' AND ...;
SELECT COUNT(*) FROM orders; -- sanity check
-- COMMIT; or ROLLBACK;DELETE sem WHERE é um desastre
DELETE FROM users; esvazia a tabela. Não existe botão de desfazer. Seja cauteloso; gastar um segundo a mais para escrever um WHERE é uma proteção barata.
DELETE … USING (DELETE com junção no PostgreSQL)
Exclua linhas de uma tabela com base em outra:
DELETE FROM orders o
USING users u
WHERE u.id = o.user_id
AND u.is_banned = true;DELETE com subconsulta
Alternativa do padrão:
DELETE FROM orders
WHERE user_id IN (SELECT id FROM users WHERE is_banned);Cascatas de FOREIGN KEY
Se orders.user_id tiver ON DELETE CASCADE, excluir um usuário excluirá automaticamente os pedidos dele. É conveniente, mas perigoso — use com moderação.
ALTER TABLE orders
ADD CONSTRAINT orders_user_fk
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE CASCADE;Exclusões lógicas
Muitos aplicativos não excluem as linhas de fato — eles definem um registro de data e hora em deleted_at:
UPDATE users SET deleted_at = NOW() WHERE id = $1;
-- Every query then has:
WHERE deleted_at IS NULLLimpando dados antigos
Para a limpeza periódica de tabelas grandes, exclua em lotes para evitar transações de longa duração:
DELETE FROM events
WHERE id IN (
SELECT id FROM events
WHERE created_at < NOW() - INTERVAL '90 days'
LIMIT 10000
);
-- run this in a loop until it returns 0 rowsTRUNCATE: quando a velocidade importa
Se você realmente quiser apagar uma tabela, TRUNCATE será mais rápido que DELETE porque não examina as linhas. Porém, ele não aciona gatilhos ROW e não pode ser revertido em todas as configurações:
TRUNCATE TABLE staging_orders;
TRUNCATE TABLE staging_orders RESTART IDENTITY CASCADE;RETURNING em DELETE
Obtenha novamente as linhas excluídas — útil para arquivamento:
WITH deleted AS (
DELETE FROM orders WHERE status = 'archived' RETURNING *
)
INSERT INTO orders_archive SELECT * FROM deleted;Recapitulação
DELETE é a instrução mais perigosa. Padrões defensivos:
- Faça SELECT primeiro
- Use BEGIN; ... ; ROLLBACK como simulação
- Divida exclusões grandes em lotes
- Prefira exclusões lógicas para dados visíveis aos usuários
- Use TRUNCATE somente em tabelas de preparação
Verificação rápida
Você executou DELETE FROM users; sem WHERE. O que deve fazer?
Perguntas Frequentes
A aula “DELETE com USING e padrões seguros” é grátis?
Sim — o texto completo de “DELETE com USING e padrões seguros” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.
O que vou aprender em “DELETE com USING e padrões seguros”?
Exclua linhas associadas a outras tabelas com DELETE ... USING e use transações + SELECT primeiro para verificar antes de operações destrutivas. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Academy?
Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “DELETE com USING e padrões seguros”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Academy?
Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- INSERT com várias linhas
- UPSERT: ON CONFLICT DO UPDATE (PostgreSQL)
- UPDATE com FROM e atualizações no estilo JOIN
- DELETE com USING e padrões seguros