兩個或多個事務在爭奪資源時形成**循環等待**,若無外力干預將永遠阻塞。InnoDB 會自動檢測並回滾代價較小的事務(ERROR 1213 (HY000): Deadlock found)。
**破壞任一條件即可避免死鎖**。
-- 事務 A
UPDATE table_a SET ... WHERE id=1; -- 鎖 A
UPDATE table_b SET ... WHERE id=1; -- 鎖 B
-- 事務 B
UPDATE table_b SET ... WHERE id=1; -- 鎖 B
UPDATE table_a SET ... WHERE id=1; -- 鎖 A
-- 形成 A→B, B→A 循環
RR 隔離級別下,範圍查詢加間隙鎖,並發插入等待間隙鎖釋放,極端情況形成死鎖。
READ COMMITTED(RC)無間隙鎖,死鎖概率顯著低於 REPEATABLE READ(RR)。業務允許時優先 RC。innodb_lock_wait_timeout(默認 50s):超時自動回滾,防無限等待innodb_deadlock_detect=ON(默認):後台線程主動檢測循環等待並回滾受害者SHOW ENGINE INNODB STATUS 中 LATEST DETECTED DEADLOCK 定期分析死鎖圖譜SHOW ENGINE INNODB STATUS死鎖本質是**並發控制邏輯缺陷**。**統一順序、短事務、好索引、低隔離** 四字訣,解決 95% 死鎖問題。剩下 5% 用檢測+重試兜底。