**以一致的全局顺序获取锁,让事务保持简短,在安全的地方降低隔离级别,并在死锁仍然发生时重试失败者。**死锁是一个环:事务 A 持有行 1 并等待行 2,而 B 持有行 2 并等待行 1——谁都无法前进,于是 DB 杀掉其中一个。
你必须打破的这个环
text
Tx A Tx B
holds row 1 ──── waits ────▶ row 2 (held by B)
▲ │
│ waits │ holds
└────────── row 1 ◀────────────┘
(cycle = deadlock; DB aborts one victim)
