Mysql讀寫鎖保姆級圖文教程


摘要:讀鎖會阻塞寫,但是不會阻塞讀,而寫鎖會把杜希俄都阻塞。

本文分享自華為雲社區《Mysql保姆級讀寫鎖圖文教程丨【綻放吧!數據庫】》,作者:Code皮皮蝦 。

准備

創建mylock表
CREATE TABLE `mylock` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
【手動增加表鎖】 lock table 表名字1 read(write),表名字2 read(write),其它;
【查看表上加過的鎖】  show open tables; 
【釋放表鎖】unlock tables;

讀鎖

讀鎖(共享鎖):針對同一份數據,多個讀操作可以同時進行而不會互相影響。

共享鎖又稱為讀鎖,簡稱S鎖,顧名思義,共享鎖就是多個事務對於同一數據可以共享一把鎖,都能訪問到數據,但是只能讀不能修改。

1.運行show open tables,可見In_use全為0即沒有加過鎖,為1表示有鎖。

2.運行lock table mylock read,lagou write加鎖后,show open tables可見加鎖成功。

3.開啟兩個查詢,在session1加讀鎖lock table mylock read

都可查詢成功。

4.在session2讀任何表都不會受影響

5.在session1中查詢其他表或更新表都不行。

6.在session2中更新表,則會阻塞。

寫鎖

寫鎖(排它鎖):當前寫操作沒有完成前,它會阻斷其他寫鎖和讀鎖。

排他鎖又稱為寫鎖,簡稱X鎖,顧名思義,排他鎖就是不能與其他所並存,如一個事務獲取了一個數據行的排他鎖,其他事務就不能再獲取該行的其他鎖,包括共享鎖和排他鎖,但是獲取排他鎖的事務是可以對數據就行讀取和修改。

先unlock tables釋放鎖,再在session1運行lock table mylock write加寫鎖

1.在session1中更新成功

但查詢失敗

2.在session2中查詢會阻塞

總結

Mylsam在執行查詢語句(select)前,會自動涉及的所有表加讀鎖,在執行增刪改操作前,會自動給涉及的表加寫鎖。

MYSQL的表級鎖有兩種模式:
1.表共享讀鎖(Table Read Lock)
2.表共享寫鎖(Table Write Lock)

結論:

1、對MyLSAM表的讀操作(加讀鎖),不會阻塞其他線程對同一表的讀請求,但會阻塞對同一表的寫請求,只有當讀鎖釋放后,才會執行其他進程的寫操作。

2、對MyLSAM表的讀操作(加讀鎖),會阻塞其他線程對同一表的讀和寫操作,只有當寫鎖釋放后,才會執行其他進程的讀寫操作。

簡而言之,就是讀鎖會阻塞寫,但是不會阻塞讀,而寫鎖會把杜希俄都阻塞。

 

點擊關注,第一時間了解華為雲新鮮技術~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM