0Pricing
SQL Academy · Lezione

DELETE con USING e pattern sicuri

Elimini righe unite ad altre tabelle con DELETE ... USING e usi transazioni e SELECT preliminari per verificare prima delle operazioni distruttive

DELETE con USING e pattern sicuri è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.

DELETE di base

Rimuovere le righe corrispondenti:

DELETE FROM users WHERE id = 1;

Testare sempre prima con SELECT

Prima di qualsiasi DELETE, eseguire lo stesso WHERE con SELECT per verificare il numero di righe:

SELECT COUNT(*) FROM orders
WHERE status = 'cancelled' AND created_at < NOW() - INTERVAL '1 year';

DELETE in una transazione

Racchiudere le operazioni distruttive in una transazione per poter eseguire ROLLBACK:

BEGIN;
DELETE FROM orders WHERE status = 'cancelled' AND ...;
SELECT COUNT(*) FROM orders;       -- sanity check
-- COMMIT;  or ROLLBACK;

DELETE senza WHERE è un disastro

DELETE FROM users; svuota la tabella. Non esiste un pulsante Annulla. È meglio essere estremamente prudenti: quel secondo in più per scrivere WHERE è una piccola assicurazione.

DELETE … USING (DELETE con JOIN in PostgreSQL)

Eliminare le righe di una tabella in base al contenuto di un'altra:

DELETE FROM orders o
USING users u
WHERE u.id = o.user_id
  AND u.is_banned = true;

DELETE con subquery

Alternativa standard:

DELETE FROM orders
WHERE user_id IN (SELECT id FROM users WHERE is_banned);

Cascate delle chiavi esterne

Se orders.user_id ha ON DELETE CASCADE, eliminando un utente vengono eliminati automaticamente anche i suoi ordini. È comodo, ma pericoloso: usare con moderazione.

ALTER TABLE orders
  ADD CONSTRAINT orders_user_fk
  FOREIGN KEY (user_id) REFERENCES users(id)
  ON DELETE CASCADE;

Eliminazioni logiche

Molte applicazioni non eliminano realmente le righe, ma impostano un timestamp deleted_at:

UPDATE users SET deleted_at = NOW() WHERE id = $1;

-- Every query then has:
WHERE deleted_at IS NULL

Pulire i dati obsoleti

Per la pulizia periodica di tabelle grandi, eliminare i dati in batch per evitare transazioni di lunga durata:

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 la velocità è importante

Se si desidera davvero svuotare una tabella, TRUNCATE è più veloce di DELETE perché non esegue la scansione delle righe. Tuttavia, non attiva i trigger ROW e non può essere annullato in tutte le configurazioni:

TRUNCATE TABLE staging_orders;
TRUNCATE TABLE staging_orders RESTART IDENTITY CASCADE;

RETURNING da DELETE

Ottenere le righe eliminate; è utile per archiviarle:

WITH deleted AS (
  DELETE FROM orders WHERE status = 'archived' RETURNING *
)
INSERT INTO orders_archive SELECT * FROM deleted;

Riepilogo

DELETE è l'istruzione più pericolosa. Strategie difensive:

  • Eseguire prima un SELECT
  • Usare BEGIN; ... ; ROLLBACK come simulazione
  • Eseguire le eliminazioni di grandi dimensioni in batch
  • Preferire le eliminazioni logiche per i dati visibili agli utenti
  • Usare TRUNCATE solo sulle tabelle di staging

Verifica rapida

È stato eseguito DELETE FROM users; senza WHERE. Che cosa bisogna fare?

Domande Frequenti

La lezione «DELETE con USING e pattern sicuri» è gratuita?

Sì — il testo completo di «DELETE con USING e pattern sicuri» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.

Cosa imparerò in «DELETE con USING e pattern sicuri»?

Elimini righe unite ad altre tabelle con DELETE ... USING e usi transazioni e SELECT preliminari per verificare prima delle operazioni distruttive Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare SQL Academy?

Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «DELETE con USING e pattern sicuri»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione SQL Academy?

Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. INSERT con più righe
  2. UPSERT: ON CONFLICT DO UPDATE (PostgreSQL)
  3. UPDATE con FROM e aggiornamenti in stile JOIN
  4. DELETE con USING e pattern sicuri
← Torna a SQL Academy