Un deadlock si verifica quando due (o più) transazioni ciascuna detengono un lock di cui l'altra ha bisogno, quindi nessuna può procedere — rimangono bloccate in attesa l'una dell'altra per sempre. I database rilevano i deadlock e li risolvono abortendo una transazione (la "vittima"), che deve ritentare. Comprendere le cause e la prevenzione è importante per le applicazioni concorrenti.
Come si verifica un deadlock
Transaction A: locks row 1, then wants row 2
Transaction B: locks row 2, then wants row 1
→ A waits for B (to release row 2), B waits for A (to release row 1) → DEADLOCK
Neither can proceed; they're waiting on each other in a cycle.
; ;
accounts .. id; accounts .. id;
accounts .. id; accounts .. id;
