【云圖說】第235期 DDS讀寫兩步走 帶您領略只讀節點的風采
829
2025-04-04
準備
一、讀鎖
二、寫鎖
三、總結
準備
一、讀鎖
二、寫鎖
三、總結
準備
創建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可見加鎖成功。
運行unlock 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表的讀操作(加讀鎖),會阻塞其他線程對同一表的讀和寫操作,只有當寫鎖釋放后,才會執行其他進程的讀寫操作。
簡而言之,就是讀鎖會阻塞寫,但是不會阻塞讀,而寫鎖會把杜希俄都阻塞。
覺得不錯的小伙伴可以關注和哦!如有錯誤可以指出來。
【綻放吧!數據庫】有獎征文火熱進行中 https://bbs.huaweicloud.com/blogs/285617
MySQL 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。