mysql之innodb的鎖分類介紹

2022-09-29 22:33:29 字數 1296 閱讀 4826

一、inn程式設計客棧odb行鎖分類

record lock:記錄鎖,也就是僅僅鎖著單獨的一行

gap lock:區間鎖僅僅鎖住乙個區間(注意這裡的區間都是開區間,也就是不包括邊界值。

next-key lock:record lock+gap lock,所以next-key lock也就半開半閉區間,且是下界開,上界閉。 www.jb51.net

next-key 鎖定範圍:(負無窮大,最小第一記錄],(記錄之間],(最大記錄,正無窮大)

二、語句鎖定情況分析

select ... from ... for update對讀遇到的所有索引記錄設定獨佔的next-key鎖定。

insert into ... values (...)對被插入的行設定獨佔鎖定。注意,這不是乙個next-key鎖定,並且不阻止其它使用者在已插入行之前的間隙插入。如果發生重複鍵錯誤,對重複的索引記錄設定共享鎖定。

在乙個表上初始化之www.cppcns.com前指定的auto_increment列之時,innodb在與auto_increment列相關聯的索引的末尾設定獨佔鎖定。在訪問自動增長計數器中,innodb使用專用的表鎖定模式auto-inc,其中鎖定僅持續到當前sql語句的結束,而不是到整個事務的結束。innodb取回先前初始化的auto_increment列的值而不設定任何鎖定。

insert into t select ... from s where ... 對每個插入到t的行設定獨佔(非next-key)鎖定。它在s上把搜尋當作乙個持續讀,但是如果mysql二進位制日誌功能被開啟,它就對s設定乙個共享的next-key鎖

定。innodb在後一種情況不得不設定鎖定:在從乙個備份的前滾恢復中,每個sql語句不得不以與它最初被執行的方式完全同樣的方式執行。

create table ... select ... 把select當作乙個持續讀來執行,或者帶著共享鎖定來執行,如前面的條目所述。

如果唯一鍵沒有衝突,replace象乙個插入一樣被做。另外,對必須更新的行設定乙個獨佔的nextkey鎖定。

update ... where ... 對搜尋遇到的每個記錄設定乙個獨佔的next-key鎖定。

delete from ... where ... 對搜尋遇到的每個記錄設定乙個獨佔的next-key鎖定。

如果對乙個表定義foreign key約束,任何需要檢查約束條件的插入,更新或刪除對它看著檢查約束的記程式設計客棧錄設定共享行級鎖定。innodb在約束失敗的情況下也設定這些鎖定。

本文標題: mysql之innodb的鎖分類介紹

本文位址: /shujuku/mysql/90063.html

MySQL之InnoDB鎖機制

innodb儲存引擎實現了如下兩種標準的行級鎖 共享鎖 s lock 允許事務讀一行資料。排他鎖 x lock 允許事務刪除或更新一行資料。如果乙個事務 t1 已經獲得了行 r 的共享鎖,那麼另外的事務 t2 可以立即獲得行 r 的共享鎖,因為讀取並沒有改變行 r 的資料,稱這種情況為鎖相容。但若有...

mysql之innodb的鎖分類介紹

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

MySQL鎖之 InnoDB儲存引擎及其鎖機制

首先要解決的乙個誤區就是 innodb儲存引擎是基於事務的。而前面博文所講的myisam儲存引擎是不支援事務的。那麼什麼是基於事務的呢?複製過來一段我覺得講得還不錯的話 在預設的情況下,mysql 從自動提交 autocommit 模式執行,這種模式會在每條語句執行完畢後把它作出的修改立刻提交給資料...