鎖是資料庫併發控制的核心機制。MySQL 採用插件式存儲引擎架構,不同引擎支援的鎖粒度不同。本文聚焦於最基礎的兩種粒度——表鎖與行級鎖,分析其機制、開銷、並發特性及適用場景。
READ LOCAL 讀鎖允許特定並發寫操作(如尾部插入 MyISAM)。即使存儲引擎支援行鎖,MySQL Server 層仍會對 ALTER TABLE、LOCK TABLES 等語句使用表鎖,忽略引擎鎖機制。
| 維度 | 表鎖 | 行級鎖 |
|---|---|---|
| 鎖開銷 | 極低 | 高 |
| 並發性能 | 差 | 優 |
| 死鎖風險 | 無 | 有 |
| 鎖衝突概率 | 高 | 低 |
| 典型引擎 | MyISAM, MEMORY, CSV | InnoDB, XtraDB |
| 適用場景 | 唯讀/多讀少寫、小表、OLAP | 高併發 OLTP、事務處理 |
UPDATE/DELETE 會導致 InnoDB 退化為全表掃描鎖定所有行(實際上鎖定所有記錄+間隙)。Innodb_row_lock_waits、Innodb_row_lock_time_avg 等狀態變量。