锁机制与死锁

两个事务交叉更新两行:循环等待形成死锁——InnoDB 等待图检测并回滚代价小的一方。

锁机制与死锁
第 01 / 7 步
账户表有两行:A(id=1)、B(id=2)。T1 与 T2 同时开启事务。 比较 0 · 交换 0
伪代码

				
					
					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 等待图检测到环 → 回滚代价较小的事务
				
			
01 / 7
速度