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 NULLPulire 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 rowsTRUNCATE: 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
- INSERT con più righe
- UPSERT: ON CONFLICT DO UPDATE (PostgreSQL)
- UPDATE con FROM e aggiornamenti in stile JOIN
- DELETE con USING e pattern sicuri