MySQL 鎖系統是併發控制核心。本文系統講解三級鎖 (表/頁/行)、InnoDB 行鎖實現 (記錄鎖/間隙鎖/Next-Key Lock)、意向鎖協議、顯式鎖表語法、事務控制 (BEGIN/COMMIT/ROLLBACK/SAVEPOINT)、鏈式事務、鎖與事務交互實例,附圖解時序圖。
| 級別 | 引擎 | 開銷 | 併發度 | 死鎖 |
|---|---|---|---|---|
| 表鎖 | MyISAM、MEMORY、InnoDB (顯式) | 最小 | 最低 | 無 |
| 頁鎖 | BDB | 中等 | 中等 | 有 |
| 行鎖 | InnoDB | 最大 | 最高 | 有 |
關鍵:只有通過索引條件檢索,InnoDB 才用行鎖;無索引條件退化為表鎖。
IS (Intent Shared):事務擬獲取表中某些行的 S 鎖。IX (Intent Exclusive):事務擬獲取表中某些行的 X 鎖。LOCK TABLES tbl_name [[AS] alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE} [, ...]
UNLOCK TABLES;
READ [LOCAL]:共享鎖,LOCAL 允許非衝突並發插入 (MyISAM)。[LOW_PRIORITY] WRITE:排他鎖,LOW_PRIORITY 降低優先級,讓讀請求優先。START TRANSACTION | BEGIN [WORK]
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
SET AUTOCOMMIT = {0 | 1}
SAVEPOINT identifier
ROLLBACK TO [SAVEPOINT] identifier
RELEASE SAVEPOINT identifier
CHAIN:提交/回滾後立即啟動新事務,保持隔離級別。RELEASE:斷開客戶端連接。SAVEPOINT:事務內部部分回滾點,可多個、同名覆蓋。


關鍵規則:在鎖表期間執行 START TRANSACTION 會隱式執行 UNLOCK TABLES,導致表鎖釋放,併發保護失效。

RELEASE SAVEPOINT 刪除後不可再回滾。concurrent_insert 變量控制:
LOW_PRIORITY WRITE 避免餓死讀請求;最小化鎖表範圍與時間。SHOW ENGINE INNODB STATUS 觀察 LATEST DETECTED DEADLOCK,優化索引順序、統一加鎖順序。鎖是併發的「紅綠燈」,事務是數據一致性的「護城河」。InnoDB 行鎖 + RR 隔離級別 + Next-Key Lock 解決 99% 併發問題。顯式鎖表、Savepoint、鏈式事務是特殊場景的手術刀,日常開發極少用到。