婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > mysql中的鎖機制深入講解

mysql中的鎖機制深入講解

熱門標簽:湘潭電銷機器人咨詢電話 高德地圖標注中心個人注冊 高德地圖標注模式 外呼系統服務 電銷機器人針對的 外呼系統防封號違法嗎 400電話辦理都選易號網 寶應電信400電話辦理費用 如何在高德地圖標注新地址

前言

為了保證數據的一致完整性,任何一個數據庫都存在鎖定機制。鎖定機制的優劣直接應想到一個數據庫系統的并發處理能力和性能,所以鎖定機制的實現也就成為了各種數據庫的核心技術之一。

大概幾個月之前項目中用到事務,需要保證數據的強一致性,期間也用到了mysql的鎖,但當時對mysql的鎖機制只是管中窺豹,所以本文打算總結一下mysql的鎖機制。

本文主要論述關于mysql鎖機制,mysql版本為5.7,引擎為innodb,由于實際中關于innodb鎖相關的知識及加鎖方式很多,所以沒有那么多精力羅列所有場景下的加鎖過程并加以分析,僅根據現在了解的知識,結合官方文檔,說說自己的理解,如果發現有不對的地方,歡迎指正。

概述

總的來說,InnoDB共有七種類型的鎖:

  • 共享/排它鎖(Shared and Exclusive Locks)
  • 意向鎖(Intention Locks)
  • 記錄鎖(Record Locks)
  • 間隙鎖(Gap Locks)
  • 臨鍵鎖(Next-key Locks)
  • 插入意向鎖(Insert Intention Locks)
  • 自增鎖(Auto-inc Locks)

mysql鎖詳解

1. 共享/排它鎖(Shared and Exclusive Locks)

  • 共享鎖(Share Locks,記為S鎖),讀取數據時加S鎖
  • 排他鎖(eXclusive Locks,記為X鎖),修改數據時加X鎖

使用的語義為:

  • 共享鎖之間不互斥,簡記為:讀讀可以并行
  • 排他鎖與任何鎖互斥,簡記為:寫讀,寫寫不可以并行

可以看到,一旦寫數據的任務沒有完成,數據是不能被其他任務讀取的,這對并發度有較大的影響。對應到數據庫,可以理解為,寫事務沒有提交,讀相關數據的select也會被阻塞,這里的select是指加了鎖的,普通的select仍然可以讀到數據(快照讀)。

2. 意向鎖(Intention Locks)

InnoDB為了支持多粒度鎖機制(multiple granularity locking),即允許行級鎖與表級鎖共存,而引入了意向鎖(intention locks)。意向鎖是指,未來的某個時刻,事務可能要加共享/排它鎖了,先提前聲明一個意向。

1、意向鎖是一個表級別的鎖(table-level locking);

2、意向鎖又分為:

  • 意向共享鎖(intention shared lock, IS),它預示著,事務有意向對表中的某些行加共享S鎖;
  • 意向排它鎖(intention exclusive lock, IX),它預示著,事務有意向對表中的某些行加排它X鎖;

加鎖的語法為:

select ... lock in share mode;  要設置IS鎖;
select ... for update;       要設置IX鎖;

事務要獲得某些行的S/X鎖,必須先獲得表對應的IS/IX鎖,意向鎖僅僅表明意向,意向鎖之間相互兼容,兼容互斥表如下:


  IS IX
IS 兼 容 兼 容
IX 兼 容 兼 容

雖然意向鎖之間互相兼容,但是它與共享鎖/排它鎖互斥,其兼容互斥表如下:

  S X
IS 兼 容 互 斥
IX 互 斥 互 斥

排它鎖是很強的鎖,不與其他類型的鎖兼容。這其實很好理解,修改和刪除某一行的時候,必須獲得強鎖,禁止這一行上的其他并發,以保障數據的一致性。

3. 記錄鎖(Record Locks)

記錄鎖,它封鎖索引記錄,例如(其中id為pk):

create table lock_example(id smallint(10),name varchar(20),primary key id)engine=innodb;

數據庫隔離級別為RR,表中有如下數據:

10, zhangsan
20, lisi
30, wangwu

select * from t where id=1 for update;

其實這里是先獲取該表的意向排他鎖(IX),再獲取這行記錄的排他鎖(我的理解是因為這里直接命中索引了),以阻止其他事務插入,更新,刪除id=1的這一行。

4. 間隙鎖(Gap Locks)

間隙鎖,它封鎖索引記錄中的間隔,或者第一條索引記錄之前的范圍,又或者最后一條索引記錄之后的范圍。依然是上面的例子,InnoDB,RR:

select * from lock_example
where id between 8 and 15 
for update;

這個SQL語句會封鎖區間(8,15),以阻止其他事務插入id位于該區間的記錄。

間隙鎖的主要目的,就是為了防止其他事務在間隔中插入數據,以導致“不可重復讀”。如果把事務的隔離級別降級為讀提交(Read Committed, RC),間隙鎖則會自動失效。

5. 臨鍵鎖(Next-key Locks)

臨鍵鎖,是記錄鎖與間隙鎖的組合,它的封鎖范圍,既包含索引記錄,又包含索引區間。

默認情況下,innodb使用next-key locks來鎖定記錄。但當查詢的索引含有唯一屬性的時候,Next-Key Lock 會進行優化,將其降級為Record Lock,即僅鎖住索引本身,不是范圍。

舉個例子,依然是如上的表lock_example,但是id降級為普通索引(key),也就是說即使這里聲明了要加鎖(for update),而且命中的是索引,但是因為索引在這里沒有UK約束,所以innodb會使用next-key locks,數據庫隔離級別RR:

事務A執行如下語句,未提交:

select * from lock_example where id = 20 for update;

事務B開始,執行如下語句,會阻塞:

insert into lock_example values('zhang',15);

如上的例子,事務A執行查詢語句之后,默認給id=20這條記錄加上了next-key lock,所以事務B插入10(包括)到30(不包括)之間的記錄都會阻塞。臨鍵鎖的主要目的,也是為了避免幻讀(Phantom Read)。如果把事務的隔離級別降級為RC,臨鍵鎖則也會失效。

6. 插入意向鎖(Insert Intention Locks)

對已有數據行的修改與刪除,必須加強互斥鎖(X鎖),那么對于數據的插入,是否還需要加這么強的鎖,來實施互斥呢?插入意向鎖,孕育而生。

插入意向鎖,是間隙鎖(Gap Locks)的一種(所以,也是實施在索引上的),它是專門針對insert操作的。多個事務,在同一個索引,同一個范圍區間插入記錄時,如果插入的位置不沖突,不會阻塞彼此。

Insert Intention Lock signals the intent to insert in such a way that multiple transactions inserting into the same index gap need not wait for each other if they are not inserting at the same position within the gap.

舉個例子(表依然是如上的例子lock_example,數據依然是如上),事務A先執行,在10與20兩條記錄中插入了一行,還未提交:

insert into t values(11, xxx);

事務B后執行,也在10與20兩條記錄中插入了一行:

insert into t values(12, ooo);

因為是插入操作,雖然是插入同一個區間,但是插入的記錄并不沖突,所以使用的是插入意向鎖,此處A事務并不會阻塞B事務。

7. 自增鎖(Auto-inc Locks)

自增鎖是一種特殊的表級別鎖(table-level lock),專門針對事務插入AUTO_INCREMENT類型的列。最簡單的情況,如果一個事務正在往表中插入記錄,所有其他事務的插入必須等待,以便第一個事務插入的行,是連續的主鍵值。

AUTO-INC lock is a special table-level lock taken by transactions inserting into tables with AUTO_INCREMENT columns. In the simplest case, if one transaction is inserting values into the table, any other transactions must wait to do their own inserts into that table, so that rows inserted by the first transaction receive consecutive primary key values.

舉個例子(表依然是如上的例子lock_example),但是id為AUTO_INCREMENT,數據庫表中數據為:

1, zhangsan
2, lisi
3, wangwu

事務A先執行,還未提交: insert into t(name) values(xxx);

事務B后執行: insert into t(name) values(ooo);

此時事務B插入操作會阻塞,直到事務A提交。

總結

以上總結的7種鎖,個人理解可以按兩種方式來區分:

1. 按鎖的互斥程度來劃分,可以分為共享、排他鎖;

  • 共享鎖(S鎖、IS鎖),可以提高讀讀并發;
  • 為了保證數據強一致,InnoDB使用強互斥鎖(X鎖、IX鎖),保證同一行記錄修改與刪除的串行性;

2. 按鎖的粒度來劃分,可以分為:

  • 表鎖:意向鎖(IS鎖、IX鎖)、自增鎖;
  • 行鎖:記錄鎖、間隙鎖、臨鍵鎖、插入意向鎖;

其中

  • InnoDB的細粒度鎖(即行鎖),是實現在索引記錄上的(我的理解是如果未命中索引則會失效);  
  • 記錄鎖鎖定索引記錄;間隙鎖鎖定間隔,防止間隔中被其他事務插入;臨鍵鎖鎖定索引記錄+間隔,防止幻讀;
  • InnoDB使用插入意向鎖,可以提高插入并發;
  • 間隙鎖(gap lock)與臨鍵鎖(next-key lock)只在RR以上的級別生效,RC下會失效;

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • MySQL鎖機制與用法分析
  • MySQL InnoDB中的鎖機制深入講解
  • MySQL數據庫鎖機制原理解析
  • MySQL隔離級別和鎖機制的深入講解
  • mysql中鎖機制的最全面講解

標簽:黃山 蘭州 佛山 南充 賀州 黔南 馬鞍山 宿遷

巨人網絡通訊聲明:本文標題《mysql中的鎖機制深入講解》,本文關鍵詞  mysql,中的,鎖,機制,深入,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《mysql中的鎖機制深入講解》相關的同類信息!
  • 本頁收集關于mysql中的鎖機制深入講解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品久久久久久久久动漫 | 欧美一区二区免费观在线| 大陆成人av片| 成人一区二区三区中文字幕| 国产suv精品一区二区883| 国产一区在线不卡| 国产精品性做久久久久久| 老司机午夜精品| 精品综合久久久久久8888| 蜜臀久久99精品久久久画质超高清 | 亚洲成av人片在线| 午夜激情一区二区三区| 日韩av高清在线观看| 奇米精品一区二区三区四区| 日韩综合在线视频| 亚洲国产精品成人久久综合一区 | 在线观看日韩国产| 国产喷白浆一区二区三区| 日韩精品免费专区| 欧美男男青年gay1069videost| 国产精品污www在线观看| 九九九久久久精品| 精品国产乱码久久久久久蜜臀| 亚洲国产综合91精品麻豆| 91亚洲精品久久久蜜桃| 亚洲图片激情小说| 91啪亚洲精品| 亚洲精品欧美激情| 色爱区综合激月婷婷| 亚洲精品国产一区二区三区四区在线| 懂色av一区二区三区蜜臀| 国产婷婷色一区二区三区| 国产一区二区不卡在线 | 不卡影院免费观看| 国产精品久久久久婷婷| av一区二区三区| 亚洲精品国产精华液| 91黄色免费版| 五月婷婷激情综合网| 欧美一区二区视频在线观看2022| 日日骚欧美日韩| 精品国产一区二区三区忘忧草| 国模娜娜一区二区三区| 中文字幕免费在线观看视频一区| 不卡视频在线看| 亚洲影院在线观看| 日韩欧美国产系列| 国产制服丝袜一区| 国产精品初高中害羞小美女文| av一区二区三区在线| 亚洲成人激情av| 日韩欧美不卡在线观看视频| 国产精品91一区二区| 亚洲欧美日韩国产另类专区| 欧美日韩久久一区| 国产精品123区| 亚洲免费在线播放| 91精品国产91久久综合桃花| 国产精品 欧美精品| 国产成人在线观看| 精品欧美一区二区久久| 日本aⅴ亚洲精品中文乱码| 欧美亚日韩国产aⅴ精品中极品| 最近日韩中文字幕| aaa欧美日韩| 亚洲天堂a在线| 日韩精品一区二区三区四区| 99在线精品免费| 麻豆精品一区二区综合av| 国产精品网站一区| 欧美一级欧美三级在线观看| 成人免费精品视频| 麻豆精品一区二区三区| 亚洲第一会所有码转帖| 日本高清不卡一区| 天天色天天爱天天射综合| 欧美一区二区视频在线观看| 午夜不卡在线视频| 日韩一二三四区| 精品综合免费视频观看| 久久久九九九九| 成人av一区二区三区| 日韩毛片精品高清免费| 一本久道久久综合中文字幕| 亚洲一区二区三区激情| 5566中文字幕一区二区电影| 黄页网站大全一区二区| 欧美国产禁国产网站cc| 成人av免费在线| 午夜精品免费在线| 欧美va亚洲va在线观看蝴蝶网| 国产精品18久久久久久久网站| 精品成人私密视频| 91免费小视频| 日韩电影免费一区| 国产三级精品三级| 91视频免费看| 老司机午夜精品| 中文字幕日韩一区| 欧美美女bb生活片| 亚洲色图在线播放| 欧美精品v国产精品v日韩精品 | 欧美午夜视频网站| 色婷婷精品大视频在线蜜桃视频| 丁香网亚洲国际| 国产成人精品影视| 成人性生交大片免费看视频在线 | 日本一区二区高清| 国产午夜一区二区三区| 久久久久久久国产精品影院| 欧美成人精精品一区二区频| 欧美一卡二卡在线观看| 日韩一二三区不卡| 日韩精品一区二区三区中文不卡| 欧美大尺度电影在线| 日韩欧美精品在线视频| 2020日本不卡一区二区视频| 久久尤物电影视频在线观看| 久久久亚洲高清| 中文字幕一区免费在线观看| 亚洲日韩欧美一区二区在线| 伊人开心综合网| 亚洲一线二线三线视频| 亚洲电影第三页| 久久66热re国产| 丁香激情综合五月| 在线亚洲欧美专区二区| 欧美日韩高清在线播放| 2021国产精品久久精品| 欧美激情中文字幕| 亚洲一区二区三区四区在线免费观看 | 国产精品一区二区在线播放 | jvid福利写真一区二区三区| 91蜜桃在线观看| 9191成人精品久久| 2020国产精品自拍| 亚洲成人777| 亚洲一区二区三区不卡国产欧美| 亚洲婷婷国产精品电影人久久| 久久综合久色欧美综合狠狠| 日韩一区二区三区在线| 欧美日韩成人综合在线一区二区| 欧美丝袜自拍制服另类| 美女国产一区二区三区| 精品亚洲免费视频| 一本久久精品一区二区| xnxx国产精品| 一区二区三区高清不卡| 国产乱码精品1区2区3区| 一本大道久久a久久精二百| 日韩欧美精品三级| 亚洲欧美综合色| 韩国av一区二区| 欧美日韩精品一区二区| 亚洲国产精品传媒在线观看| 视频一区二区三区在线| 不卡的av在线| 欧美精品一区二区不卡| 午夜精品一区二区三区三上悠亚 | 欧美日韩成人综合| 中文字幕免费观看一区| 青青草伊人久久| 91成人免费在线| 国产欧美精品日韩区二区麻豆天美| 亚洲成av人片一区二区三区| kk眼镜猥琐国模调教系列一区二区| 日韩欧美成人一区| 亚洲一区二区三区四区在线免费观看| 国产在线视频不卡二| 欧美日高清视频| 一区二区三区中文字幕在线观看| 国产精品自在欧美一区| 精品视频在线看| 一区二区三区日本| 91美女视频网站| 国产精品第五页| 粉嫩av一区二区三区在线播放 | 久久99精品久久只有精品| 欧美色爱综合网| 亚洲欧美日韩在线播放| gogogo免费视频观看亚洲一| 久久久天堂av| 国产精品影视在线观看| 欧美xxxx老人做受| 日本亚洲最大的色成网站www| 欧美中文字幕久久| 亚洲九九爱视频| 91福利国产成人精品照片| 亚洲欧美日韩一区二区三区在线观看| 高清国产一区二区| 国产精品综合网| 色婷婷综合久久久久中文| 精品国产成人在线影院 | 国产欧美一区二区精品性| 亚洲精品成人精品456| 国产一区二区三区香蕉| 91精品91久久久中77777| 欧美韩国日本一区| 秋霞电影网一区二区| 色美美综合视频|