Acquérez les verrous dans un ordre global cohérent, gardez les transactions courtes, abaissez l'isolation où c'est sûr, et réessayez le perdant quand un deadlock survient malgré tout. Un deadlock est un cycle : la transaction A tient la ligne 1 et attend la ligne 2, tandis que B tient la ligne 2 et attend la ligne 1 — aucune ne peut avancer, donc la DB en tue une.
Le cycle que vous devez briser
Tx A Tx B
holds row 1 ──── waits ────▶ row 2 (held by B)
▲ │
│ waits │ holds
└────────── row 1 ◀────────────┘
(cycle = deadlock; DB aborts one victim)
