InnoDB 结合了两种机制。MVCC 让普通的 SELECT 读取一致性快照而无需加锁,因此读者永远不会阻塞写者。锁则保护写入:UPDATE/DELETE/SELECT ... FOR UPDATE 会获取行锁,InnoDB 还使用 next-key 锁(行 + 它前面的间隙)在 REPEATABLE READ 下阻止幻读。
死锁
死锁是一个环:T1 持有锁 A 并想要 B,而 T2 持有 B 并想要 A。双方都无法前进。InnoDB (代价较小的那个牺牲者),返回错误 1213,从而让另一个完成。
