0Pricing
SQL Academy · Aula

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 NULL

Limpando 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 rows

TRUNCATE: 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

  1. INSERT com várias linhas
  2. UPSERT: ON CONFLICT DO UPDATE (PostgreSQL)
  3. UPDATE com FROM e atualizações no estilo JOIN
  4. DELETE com USING e padrões seguros
← Voltar para SQL Academy