mysql優化二之鎖機制

2022-05-22 17:03:13 字數 1659 閱讀 3240

mysql提供了鎖機制和mvcc機制來保證併發操作的安全性,這裡主要討論鎖機制,

mvcc見下篇文章

mysql的鎖按照鎖粒度可分為行鎖與表鎖,按照操作型別劃分可讀鎖和寫鎖

innodb儲存引擎支援表鎖和行鎖,預設鎖為行鎖,myisam只支援表鎖

鎖粒度越高則併發性越好

一、操作語法

1、 show open tables;檢視資料庫中哪些表加了鎖

in-use為0則表示未加鎖

2、 lock table (table_name) read(write)

3、 unlock tables;解鎖

二、示例

1、 讀鎖

開了兩個mysql客戶端,左邊客戶端中給mytest資料庫中的test1表加了讀鎖

左客戶端拒絕執行

右客戶端阻塞住

此時我們解鎖

可以看到右客戶端立即被釋放並正確執行操作

2、 寫鎖

給左客戶端test1表加上寫鎖

因為mysql預設的儲存引擎是innodb,而innodb預設為行鎖,我們要測試行鎖首先需要把mysql的自動提交關閉

注意點

1、 間隙鎖

我們在左邊客戶端對id在(0,5]範圍內的資料做寫操作,但是由於資料表中沒有id為4的資料行,按理說右邊資料庫插入乙個id為4的資料行不會被鎖住,但是事實表明它被鎖住了。這既是mysql的間隙鎖機制。因此我們在資料庫操作時其實應該避免這種間隙的產生,我們可以在表裡設定乙個狀態位,當要刪除某一資料行時,可以選擇將該狀態位設定為無效而不是真正的刪除。

2、 索引失效

當左客戶端在已經減了索引的loc列用int型來查詢時,索引失效就會導致整張表被鎖住

行鎖變表鎖的原因:mysql的行鎖是用索引實現的

3、 如何鎖住一行

在select語句找出某一行之後加乙個for update

mysql 簡述鎖機制 MySQL之鎖機制簡述

一 為什麼需要鎖 鎖是計算機協調多個程序或執行緒併發訪問某一資源的機制。為了保證資料庫中資料併發訪問的一致性 有效性,故引入鎖機制。其中鎖衝突也是影響資料庫併發訪問效能的乙個重要因素。二 鎖的分類 分類一 行鎖,頁鎖,表鎖 分類二 共享鎖 排他鎖 意向鎖 is ix 分類三 樂觀鎖 悲觀鎖 inno...

鎖機制之MySQL表鎖

如何保證在被併發訪問時資料的一致性 完整性和有效性,是資料庫關注的核心問題。資料庫的鎖機制就是為了解決這個問題而出現的。鎖機制在一定程度上將對共享資源的併發訪問有序化,從而保證資料的一致完整性。鎖機制的好壞直接影響到資料的併發處理能力和效能。乙個好的鎖機制的實現是乙個資料的核心競爭力之一。我們知道在...

mysql鎖機制 mysql 鎖機制

一 概述 mysql有三種鎖的級別 頁級 表級 行級。myisam和memory儲存引擎採用的是表級鎖 table level locking bdb儲存引擎採用的是頁面鎖 page level locking 但也支援表級鎖 innodb儲存引擎既支援行級鎖 row level locking 也...