Mysql之鎖的基本介紹

2022-07-24 08:51:11 字數 1360 閱讀 8453

資料庫鎖定機制簡單來說,就是資料庫為了保證資料的一致性,而使各種共享資源在被併發訪問變得有序所設計的一種規則。對於任何一種資料庫來說都需要有相應的鎖定機制,所以mysql自然也不能例外。mysql資料庫由於其自身架構的特點,存在多種資料儲存引擎,每種儲存引擎所針對的應用場景特點都不太一樣,為了滿足各自特定應用場景的需求,每種儲存引擎的鎖定機制都是為各自所面對的特定場景而優化設計,所以各儲存引擎的鎖定機制也有較大區別。mysql各儲存引擎使用了三種型別(級別)的鎖定機制:表級鎖定,行級鎖定和頁級鎖定。

鎖的分類

表鎖

表級別的鎖定是mysql各儲存引擎中最大顆粒度的鎖定機制。該鎖定機制最大的特點是實現邏輯非常簡單,帶來的系統負面影響最小。所以獲取鎖和釋放鎖的速度很快。由於表級鎖一次會將整個表鎖定,所以可以很好的避免困擾我們的死鎖問題。

優點:開銷小,加鎖快;不會出現死鎖  

缺點:鎖定粒度大,發生鎖衝突的概率最高,併發度最低

頁鎖

頁級鎖定是mysql中比較獨特的一種鎖定級別,在其他資料庫管理軟體中也並不是太常見。頁級鎖定的特點是鎖定顆粒度介於行級鎖定與表級鎖之間,所以獲取鎖定所需要的資源開銷,以及所能提供的併發處理能力也同樣是介於上面二者之間。另外,頁級鎖定和行級鎖定一樣,會發生死鎖。

優點:開銷和加鎖時間界於表鎖和行鎖之間;鎖定粒度界於表鎖和行鎖之間,併發度一般

缺點:會出現死鎖

行鎖

行級鎖定最大的特點就是鎖定物件的顆粒度很小,也是目前各大資料庫管理軟體所實現的鎖定顆粒度最小的。由於鎖定顆粒度很小,所以發生鎖定資源爭用的概率也最小,能夠給予應用程式盡可能大的併發處理能力而提高一些需要高併發應用系統的整體效能。

優點:鎖定粒度最小,發生鎖衝突的概率最低,併發度也最高

缺點:開銷大,加鎖慢;會產生死鎖

myisam

myisam是一種非事務型別的只支援表鎖的儲存引擎。使用的鎖定機制完全是由mysql提供的表級鎖定實現。

mysql的表級鎖有兩種模式:表共享讀鎖(table read lock)和表獨佔寫鎖(table write lock)。鎖模式的相容性:

1.對myisam表的讀操作,不會阻塞其他使用者對同一表的讀請求,但會阻塞對同一表的寫請求;

2.對myisam表的寫操作,則會阻塞其他使用者對同一表的讀和寫操作;

myisam加鎖方式:

myisam在執行查詢語句(select)前,會自動給涉及的所有表加讀鎖。

在執行更新操作(update、delete、insert等)前,會自動給涉及的表加寫鎖,這個過程並不需要使用者干預,因此,使用者一般不需要直接用lock table命令給myisam表顯式加鎖。

mysql之innodb的鎖分類介紹

一 innodb行鎖分類 record lock 記錄鎖,也就是僅僅鎖著單獨的一行 gap lock 區間鎖,僅僅鎖住乙個區間 注意這裡的區間都是開區間,也就是不包括邊界值。next key lock record lock gap lock,所以next key lock也就半開半閉區間,且是下界...

mysql之innodb的鎖分類介紹

一 inn程式設計客棧odb行鎖分類 record lock 記錄鎖,也就是僅僅鎖著單獨的一行 gap lock 區間鎖僅僅鎖住乙個區間 注意這裡的區間都是開區間,也就是不包括邊界值。next key lock record lock gap lock,所以next key lock也就半開半閉區間...

mysql筆記 鎖介紹

學習資料 關於mysql核心,一定要知道的!併發控制保證資料一致性的方法 1 鎖 普通鎖 序列執行 讀寫鎖 讀讀併發 2 資料多版本 讀寫併發 1 寫任務發生時,將資料轉殖乙份,以版本號區別 2 寫任務操作新轉殖的資料,直至提交 3 併發讀任務可以繼續讀舊版本的資料,不至於阻塞 實現讀取舊版本資料 ...