0Pricing
SQL Academy · Lezione

Proprietà ACID e anomalie

Ripassi atomicità, consistenza, isolamento e durabilità, oltre alle quattro anomalie classiche: lettura sporca, lettura non ripetibile, phantom e aggiornamento perso.

Proprietà ACID e anomalie è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 1 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.

ACID

Una transazione è affidabile quando è:

  • Atomica — tutto o niente
  • Coerente — porta il DB da uno stato valido a un altro
  • Isolata — le transazioni concorrenti non interferiscono tra loro
  • Durevole — una volta confermati, i dati sopravvivono agli arresti anomali

Una transazione in SQL

Racchiudere le operazioni tra BEGIN ... COMMIT:

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
-- If anything fails, ROLLBACK leaves both rows unchanged.

L'atomicità in azione

Se il secondo UPDATE fallisce, il primo viene annullato: il denaro non viene perso a metà operazione:

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- Crash here, or ROLLBACK: account 1 is unchanged.

Coerenza

I vincoli (NOT NULL, CHECK, FK) vengono verificati al momento del commit. Una transazione che lascerebbe il DB in uno stato non valido fallisce:

BEGIN;
INSERT INTO orders (user_id, total) VALUES (999, 100);  -- FK fails on commit if user 999 doesn't exist.
COMMIT;
-- ERROR: insert or update violates foreign key constraint
-- ROLLBACK happens automatically.

Isolamento: perché è importante

Due transazioni concorrenti possono alterare la visione dei dati dell'altra senza isolamento. Anomalie classiche:

  • Lettura sporca — lettura di dati non confermati
  • Lettura non ripetibile — la stessa query restituisce righe diverse
  • Fantasma — compaiono nuove righe durante la transazione
  • Aggiornamento perso — due aggiornamenti si sovrascrivono a vicenda

Lettura sporca

Lettura di una riga modificata ma non ancora confermata da un'altra transazione. PostgreSQL lo impedisce a tutti i livelli di isolamento.

Lettura non ripetibile

Si legge la riga 1, un'altra transazione conferma un aggiornamento della riga 1, quindi la si legge di nuovo: il valore è diverso.

Lettura fantasma

Si esegue SELECT COUNT(*) due volte nella stessa transazione. Tra le due chiamate, un'altra transazione conferma un INSERT: il secondo conteggio è maggiore.

Aggiornamento perso

Due transazioni leggono entrambe balance=100, entrambe scrivono balance=balance-50 ed entrambe eseguono il commit: uno dei due -50 va perso.

Durabilità

Quando COMMIT restituisce il risultato, la modifica è sul disco (o replicata, a seconda delle impostazioni). Un arresto anomalo un millisecondo dopo non la perde. PostgreSQL garantisce la durabilità tramite WAL (Write-Ahead Logging).

Commit automatico

Per impostazione predefinita, ogni istruzione è una transazione distinta:

UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- Implicitly: BEGIN; statement; COMMIT;

SAVEPOINT

Rollback parziale all'interno di una transazione:

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
SAVEPOINT before_step2;
UPDATE accounts SET balance = balance + 100 WHERE id = 999;
-- ERROR — but we can recover:
ROLLBACK TO SAVEPOINT before_step2;
-- continue
COMMIT;

Riepilogo

Le transazioni sono la rete di sicurezza dei database relazionali.

  • ACID: atomiche, coerenti, isolate, durevoli
  • Le quattro anomalie classiche
  • BEGIN ... COMMIT o ROLLBACK
  • SAVEPOINT per il rollback parziale

Verifica rapida

Quale anomalia si verifica quando due transazioni leggono entrambe lo stesso valore, lo modificano ed eseguono entrambe il commit?

Domande Frequenti

La lezione «Proprietà ACID e anomalie» è gratuita?

Sì — il testo completo di «Proprietà ACID e anomalie» è 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 «Proprietà ACID e anomalie»?

Ripassi atomicità, consistenza, isolamento e durabilità, oltre alle quattro anomalie classiche: lettura sporca, lettura non ripetibile, phantom e aggiornamento perso. 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 1 di 4.

Quanto tempo richiede la lezione «Proprietà ACID e anomalie»?

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. Proprietà ACID e anomalie
  2. Livelli di isolamento: READ COMMITTED, REPEATABLE READ, SERIALIZABLE
  3. Deadlock: rilevamento e prevenzione
  4. Locking ottimistico e pessimistico
← Torna a SQL Academy