在執行表檢查(CHECK TABLE)、修復(REPAIR TABLE)或匯出備份等維護操作前,加鎖可防止資料被同時修改導致不一致。
-- 加鎖(讀鎖:允許讀、禁止寫)
LOCK TABLE tbl_name READ;
-- 刷新表緩存至磁碟(確保檢查/修復讀到最新資料)
FLUSH TABLES;
-- 執行維護操作...
-- CHECK TABLE tbl_name;
-- REPAIR TABLE tbl_name;
-- 解鎖
UNLOCK TABLES;
| 模式 | 效果 | 適用場景 |
|---|---|---|
READ | 所有 Session 可讀、不可寫;持鎖 Session 只能讀 | 備份、檢查、只讀報表 |
WRITE | 持鎖 Session 可讀寫;其他 Session 全部阻塞(不可讀寫) | 修復表、大量批次更新、結構變更 |
LOCK TABLES 需 LOCK TABLES 權限。UNLOCK TABLES。LOCK TABLES 會隱含提交當前事務;UNLOCK TABLES 也會隱含提交。SELECT ... FOR UPDATE),表鎖會降低併發效能。