mysql之innodb的鎖分類介紹
更新時間:2012年11月20日 15:51:11 作者:
本文將介紹mysql之innodb的鎖分類,需要了解更多的朋友可以參考下
一、innodb行鎖分類
record lock:記錄鎖,也就是僅僅鎖著單獨的一行
gap lock:區(qū)間鎖,僅僅鎖住一個區(qū)間(注意這里的區(qū)間都是開區(qū)間,也就是不包括邊界值。
next-key lock:record lock+gap lock,所以next-key lock也就半開半閉區(qū)間,且是下界開,上界閉。 www.fzitv.net
next-key 鎖定范圍:(負無窮大,最小第一記錄],(記錄之間],(最大記錄,正無窮大)
二、語句鎖定情況分析
SELECT ... FROM ... FOR UPDATE對讀遇到的所有索引記錄設置獨占的next-key鎖定。
INSERT INTO ... VALUES (...)對被插入的行設置獨占鎖定。注意,這不是一個next-key鎖定,并且不阻止其它用戶在已插入行之前的間隙插入。如果發(fā)生重復鍵錯誤,對重復的索引記錄設置共享鎖定。
· 在一個表上初始化之前指定的AUTO_INCREMENT列之時,InnoDB在與AUTO_INCREMENT列相關聯(lián)的索引的末尾設置獨占鎖定。在訪問自動增長計數(shù)器中,InnoDB使用專用的表鎖定模式AUTO-INC,其中鎖定僅持續(xù)到當前SQL語句的結束,而不是到整個事務的結束。InnoDB取回先前初始化的AUTO_INCREMENT列的值而不設定任何鎖定。
INSERT INTO T SELECT ... FROM S WHERE ... 對每個插入到T的行設置獨占(非next-key)鎖定。它在S上把搜索當作一個持續(xù)讀,但是如果MySQL二進制日志功能被打開,它就對S設置一個共享的next-key鎖
定。InnoDB在后一種情況不得不設置鎖定:在從一個備份的前滾恢復中,每個SQL語句不得不以與它最初被執(zhí)行的方式完全同樣的方式執(zhí)行。
· CREATE TABLE ... SELECT ... 把SELECT當作一個持續(xù)讀來執(zhí)行,或者帶著共享鎖定來執(zhí)行,如前面的條目所述。
· 如果唯一鍵沒有沖突,REPLACE象一個插入一樣被做。另外,對必須更新的行設置一個獨占的nextkey鎖定。
· UPDATE ... WHERE ... 對搜索遇到的每個記錄設置一個獨占的next-key鎖定。
· DELETE FROM ... WHERE ... 對搜索遇到的每個記錄設置一個獨占的next-key鎖定。
· 如果對一個表定義FOREIGN KEY約束,任何需要檢查約束條件的插入,更新或刪除對它看著檢查約束的記錄設置共享行級鎖定。InnoDB在約束失敗的情況下也設置這些鎖定。
record lock:記錄鎖,也就是僅僅鎖著單獨的一行
gap lock:區(qū)間鎖,僅僅鎖住一個區(qū)間(注意這里的區(qū)間都是開區(qū)間,也就是不包括邊界值。
next-key lock:record lock+gap lock,所以next-key lock也就半開半閉區(qū)間,且是下界開,上界閉。 www.fzitv.net
next-key 鎖定范圍:(負無窮大,最小第一記錄],(記錄之間],(最大記錄,正無窮大)
二、語句鎖定情況分析
SELECT ... FROM ... FOR UPDATE對讀遇到的所有索引記錄設置獨占的next-key鎖定。
INSERT INTO ... VALUES (...)對被插入的行設置獨占鎖定。注意,這不是一個next-key鎖定,并且不阻止其它用戶在已插入行之前的間隙插入。如果發(fā)生重復鍵錯誤,對重復的索引記錄設置共享鎖定。
· 在一個表上初始化之前指定的AUTO_INCREMENT列之時,InnoDB在與AUTO_INCREMENT列相關聯(lián)的索引的末尾設置獨占鎖定。在訪問自動增長計數(shù)器中,InnoDB使用專用的表鎖定模式AUTO-INC,其中鎖定僅持續(xù)到當前SQL語句的結束,而不是到整個事務的結束。InnoDB取回先前初始化的AUTO_INCREMENT列的值而不設定任何鎖定。
INSERT INTO T SELECT ... FROM S WHERE ... 對每個插入到T的行設置獨占(非next-key)鎖定。它在S上把搜索當作一個持續(xù)讀,但是如果MySQL二進制日志功能被打開,它就對S設置一個共享的next-key鎖
定。InnoDB在后一種情況不得不設置鎖定:在從一個備份的前滾恢復中,每個SQL語句不得不以與它最初被執(zhí)行的方式完全同樣的方式執(zhí)行。
· CREATE TABLE ... SELECT ... 把SELECT當作一個持續(xù)讀來執(zhí)行,或者帶著共享鎖定來執(zhí)行,如前面的條目所述。
· 如果唯一鍵沒有沖突,REPLACE象一個插入一樣被做。另外,對必須更新的行設置一個獨占的nextkey鎖定。
· UPDATE ... WHERE ... 對搜索遇到的每個記錄設置一個獨占的next-key鎖定。
· DELETE FROM ... WHERE ... 對搜索遇到的每個記錄設置一個獨占的next-key鎖定。
· 如果對一個表定義FOREIGN KEY約束,任何需要檢查約束條件的插入,更新或刪除對它看著檢查約束的記錄設置共享行級鎖定。InnoDB在約束失敗的情況下也設置這些鎖定。
相關文章
在IDEA的maven項目中連接并使用MySQL8.0的方法教程
這篇文章主要介紹了如何在IDEA的maven項目中連接并使用MySQL8.0,本文分步驟給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02
Mysql入門基礎 數(shù)據(jù)庫創(chuàng)建篇
Mysql入門基礎 數(shù)據(jù)庫創(chuàng)建篇,剛接觸php與mysql的朋友可以參考下。多寫多測試。2010-04-04
MySQL 搭建雙主復制服務并通過 HAProxy 負載均衡的過程詳解
在數(shù)據(jù)庫管理中,數(shù)據(jù)的備份和同步是至關重要的環(huán)節(jié),而雙主復制(Dual Master Replication)作為一種高可用性和數(shù)據(jù)同步的解決方案,本文將介紹MySQL雙主復制的配置過程并通過 HAProxy 負載均衡,感興趣的朋友一起看看吧2024-03-03
MySQL 客戶端不輸入用戶名和密碼直接連接數(shù)據(jù)庫的2個方法
MySQL 客戶端不輸入用戶名和密碼直接連接數(shù)據(jù)庫的2個方法,大家可以測試下。2009-07-07

