Transactions & isolation levels

A transaction groups multiple operations into one unit: either all commit or all roll back. Isolation level defines how much one transaction “sees” of other concurrent transactions — from dirty reads to full serializability.

Isolation levels (strongest to weakest)

flowchart TB S[SERIALIZABLE\nNo phantoms, full isolation] RR[REPEATABLE READ\nSame row read twice = same value] RC[READ COMMITTED\nOnly see committed data] RU[READ UNCOMMITTED\nDirty reads possible] S --> RR --> RC --> RU
LevelDirty readNon-repeatable readPhantom read
READ UNCOMMITTEDYesYesYes
READ COMMITTEDNoYesYes
REPEATABLE READNoNoYes*
SERIALIZABLENoNoNo

Anomalies explained

sequenceDiagram participant T1 as Transaction 1 participant T2 as Transaction 2 participant DB as Database T1->>DB: SELECT * FROM orders T2->>DB: INSERT order (committed) T1->>DB: SELECT * FROM orders (same query) Note over T1: Phantom: new row appears

Default in many DBs is READ COMMITTED. Use REPEATABLE READ or SERIALIZABLE when you need consistent reads within a transaction; higher isolation can reduce concurrency (more locking).