MySQL MyISAM 讀鎖寫鎖限制
阿新 • • 發佈:2020-12-12
文章目錄
MyISAM 自動加鎖機制
在執行查詢語句(SELECT)前,會自動給涉及的所有表加讀鎖,在執行增刪改操作前,會自動給涉及的表加寫鎖。
二、MySql 的表級鎖的兩種模式
1.表共享讀鎖(Table Read Lock)
當前session | 其他 session | |
---|---|---|
讀鎖表 | √ | √ |
寫鎖表 | × | 阻塞更新 |
讀未鎖表 | × | √ |
寫未鎖表 | × | √ |
2.表獨佔寫鎖(Table Write Lock)
當前session | 其他 session | |
---|---|---|
讀鎖表 | √ | 阻塞查詢 |
寫鎖表 | √ | 阻塞更新 |
讀未鎖表 | × | √ |
寫未鎖表 | × | √ |
注意
1.有時效寫鎖測試沒有效果是因為 mysql 存在查詢快取。
2.當手動連續執行兩次鎖表操作時,最後執行的語句生效。
例如:
LOCK TABLE test01 READ;
LOCK TABLE test02 READ;
(test02 表生效)
總結
- 對 MyISAM 儲存引擎表的讀操作(加讀鎖),不會阻塞其他程序對同一表的讀請求,但會阻塞同一表的寫請求,只有當讀鎖釋放後,才會執行其他進行的寫操作。
- 對 MyISAM 儲存引擎表的寫操作(加寫表),會阻塞其他程序對同一表的讀和寫作操,只有當鞋標釋放後,才會執行其他程序的讀寫操作
- 簡單來說:讀鎖會阻塞寫,而寫鎖會阻塞讀寫