mysql資料鎖 mysql資料庫鎖有哪些

2021-10-17 11:33:23 字數 1288 閱讀 9132

mysql資料庫中的鎖有:1、共享鎖,表示對資料進行讀操作;2、排他鎖,表示對資料進行寫操作;3、行鎖,對一行記錄加鎖,只影響一條記錄;4、意向鎖,為了在乙個事務中揭示下一行將要被請求鎖的型別。

mysql資料庫鎖

1、共享鎖(shared lock,也叫s鎖)

共享鎖(s)表示對資料進行讀操作。因此多個事務可以同時為乙個物件加共享鎖。

產生共享鎖的sql語句:select * from ad_plan lock in share mode;

2、排他鎖(exclusive lock,也叫x鎖)

排他鎖表示對資料進行寫操作。如果乙個事務對物件加了排他鎖,其他事務就不能再給它加任何鎖了。

產生排他鎖的sql語句:select * from ad_plan for update;

3、行鎖(row lock)

對一行記錄加鎖,只影響一條記錄。

通常用在dml語句中,如insert, update, delete等。

innodb行鎖是通過給索引上的索引項加鎖來實現的,這一點mysql與oracle不同,後者是通過在資料塊中對相應資料行加鎖來實現的。

innodb這種行鎖實現特點意味著:只有通過索引條件檢索資料,innodb才使用行級鎖,否則,innodb將使用表鎖!

4、意向鎖

意向共享鎖(is):表示事務準備給資料行加入共享鎖,也就是說乙個資料行加共享鎖前必須先取得該錶的is鎖;

意向排他鎖(ix):類似上面,表示事務準備給資料行加入排他鎖,說明事務在乙個資料行加排他鎖前必須先取得該錶的ix鎖。

意向鎖是 innodb 自動加的,不需要使用者干預。

對於insert、update和delete,innodb 會自動給涉及的資料加排他鎖;對於一般的select語句,innodb 不會加任何鎖,事務可以通過以下語句顯式加共享鎖或排他鎖。

共享鎖:select … lock in share mode;

排他鎖:select … for update;

鎖的級別

根據鎖的級別或密度來劃分,mysql有三種鎖的級別:頁級、表級、行級。

(1)表級鎖

開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖衝突的概率最高,併發度最低。

(2)行級鎖

開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的概率最低,併發度也最高。

(3)頁面鎖

開銷和加鎖時間界於表鎖和行鎖之間;會出現死鎖;鎖定粒度界於表鎖和行鎖之間,併發度一般。

mysql資料庫鎖 MySQL資料庫的鎖機制

在併發訪問情況下,很有可能出現不可重複讀等等讀現象。為了更好的應對高併發,封鎖 時間戳 樂觀併發控制 樂觀鎖 悲觀併發控制 悲觀鎖 都是併發控制採用的主要技術方式。鎖分類 按操作劃分 dml鎖,ddl鎖 按鎖的粒度劃分 表級鎖 行級鎖 頁級鎖 按鎖級別劃分 共享鎖 排他鎖 按加鎖方式劃分 自動鎖 顯...

mysql資料庫鎖

表鎖 讀鎖會阻塞寫,但是不會阻塞讀操作。而寫鎖則會把讀和寫都阻塞 myisam索引結構 myisam索引用的b tree來儲存資料,myisam索引的指標指向的是鍵值的位址,位址儲存的是資料。b tree的資料域儲存的內容為實際資料的位址,也就是說它的索引和實際的資料是分開的,只不過是用索引指向了實...

MySQL資料庫鎖

mysql鎖分為表級鎖 頁級鎖和行級鎖。innodb 行級鎖 在特殊情況下會公升級為表級鎖,如給沒有加索引的非唯一字段加鎖,或者在普通索引中,使用模糊查詢使索引失效,導致加鎖時,公升級為表鎖 myisam 表級鎖 排他鎖又稱為寫鎖,乙個事務在一行資料加上排他鎖後,其他事務不能再在其上加其他的鎖,也修...