§08 事务进阶
锁机制与死锁
两个事务交叉更新两行:循环等待形成死锁——InnoDB 等待图检测并回滚代价小的一方。
锁机制与死锁
伪代码
1
-- 死锁经典场景
2
T1: UPDATE account SET ... WHERE id = 1; -- T1 持有行 1 的排他锁
3
T2: UPDATE account SET ... WHERE id = 2; -- T2 持有行 2 的排他锁
4
T1: UPDATE account SET ... WHERE id = 2; -- T1 等待行 2
5
T2: UPDATE account SET ... WHERE id = 1; -- T2 等待行 1 —— 循环等待!
6
-- InnoDB 等待图检测到环 → 回滚代价较小的事务