mysql之innodb的鎖分類介紹

來源:互聯網
上載者:User

一、innodb行鎖分類

record lock:記錄鎖,也就是僅僅鎖著單獨的一行
gap lock:區間鎖,僅僅鎖住一個區間(注意這裡的區間都是開區間,也就是不包括邊界值。
next-key lock:record lock+gap lock,所以next-key lock也就半開半閉區間,且是下界開,上界閉。 www.2cto.com
next-key 鎖定範圍:(負無窮大,最小第一記錄],(記錄之間],(最大記錄,正無窮大)

二、語句鎖定情況分析

SELECT ... FROM ... FOR UPDATE對讀遇到的所有索引記錄設定獨佔的next-key鎖定。
INSERT INTO ... VALUES (...)對被插入的行設定獨佔鎖定。注意,這不是一個next-key鎖定,並且不阻止其它使用者在已插入行之前的間隙插入。如果發生重複鍵錯誤,對重複的索引記錄設定共用鎖定定。
· 在一個表上初始化之前指定的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在約束失敗的情況下也設定這些鎖定。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.