亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

mysql中的鎖機(jī)制深入講解

2024-07-25 19:09:16
字體:
供稿:網(wǎng)友

前言

為了保證數(shù)據(jù)的一致完整性,任何一個(gè)數(shù)據(jù)庫都存在鎖定機(jī)制。鎖定機(jī)制的優(yōu)劣直接應(yīng)想到一個(gè)數(shù)據(jù)庫系統(tǒng)的并發(fā)處理能力和性能,所以鎖定機(jī)制的實(shí)現(xiàn)也就成為了各種數(shù)據(jù)庫的核心技術(shù)之一。

大概幾個(gè)月之前項(xiàng)目中用到事務(wù),需要保證數(shù)據(jù)的強(qiáng)一致性,期間也用到了mysql的鎖,但當(dāng)時(shí)對(duì)mysql的鎖機(jī)制只是管中窺豹,所以本文打算總結(jié)一下mysql的鎖機(jī)制。

本文主要論述關(guān)于mysql鎖機(jī)制,mysql版本為5.7,引擎為innodb,由于實(shí)際中關(guān)于innodb鎖相關(guān)的知識(shí)及加鎖方式很多,所以沒有那么多精力羅列所有場(chǎng)景下的加鎖過程并加以分析,僅根據(jù)現(xiàn)在了解的知識(shí),結(jié)合官方文檔,說說自己的理解,如果發(fā)現(xiàn)有不對(duì)的地方,歡迎指正。

概述

總的來說,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鎖),讀取數(shù)據(jù)時(shí)加S鎖
  • 排他鎖(eXclusive Locks,記為X鎖),修改數(shù)據(jù)時(shí)加X鎖

使用的語義為:

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

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

2. 意向鎖(Intention Locks)

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

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

2、意向鎖又分為:

  • 意向共享鎖(intention shared lock, IS),它預(yù)示著,事務(wù)有意向?qū)Ρ碇械哪承┬屑庸蚕鞸鎖;
  • 意向排它鎖(intention exclusive lock, IX),它預(yù)示著,事務(wù)有意向?qū)Ρ碇械哪承┬屑优潘黊鎖;

加鎖的語法為:

select ... lock in share mode;  要設(shè)置IS鎖;select ... for update;       要設(shè)置IX鎖;

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

 

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

 

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

 

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

 

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

3. 記錄鎖(Record Locks)

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

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

數(shù)據(jù)庫隔離級(jí)別為RR,表中有如下數(shù)據(jù):

10, zhangsan
20, lisi
30, wangwu

select * from t where id=1 for update;

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

4. 間隙鎖(Gap Locks)

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

select * from lock_examplewhere id between 8 and 15 for update;

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

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

5. 臨鍵鎖(Next-key Locks)

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

默認(rèn)情況下,innodb使用next-key locks來鎖定記錄。但當(dāng)查詢的索引含有唯一屬性的時(shí)候,Next-Key Lock 會(huì)進(jìn)行優(yōu)化,將其降級(jí)為Record Lock,即僅鎖住索引本身,不是范圍。

舉個(gè)例子,依然是如上的表lock_example,但是id降級(jí)為普通索引(key),也就是說即使這里聲明了要加鎖(for update),而且命中的是索引,但是因?yàn)樗饕谶@里沒有UK約束,所以innodb會(huì)使用next-key locks,數(shù)據(jù)庫隔離級(jí)別RR:

事務(wù)A執(zhí)行如下語句,未提交:

select * from lock_example where id = 20 for update;

事務(wù)B開始,執(zhí)行如下語句,會(huì)阻塞:

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

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

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

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

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

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.

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

insert into t values(11, xxx);

事務(wù)B后執(zhí)行,也在10與20兩條記錄中插入了一行:

insert into t values(12, ooo);

因?yàn)槭遣迦氩僮?,雖然是插入同一個(gè)區(qū)間,但是插入的記錄并不沖突,所以使用的是插入意向鎖,此處A事務(wù)并不會(huì)阻塞B事務(wù)。

7. 自增鎖(Auto-inc Locks)

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

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.

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

1, zhangsan
2, lisi
3, wangwu

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

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

此時(shí)事務(wù)B插入操作會(huì)阻塞,直到事務(wù)A提交。

總結(jié)

以上總結(jié)的7種鎖,個(gè)人理解可以按兩種方式來區(qū)分:

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

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

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

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

其中

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

好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到MYSQL教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
首页综合国产亚洲丝袜| 九九热免费在线| 久久伊人精品| 欧美精品videossex88| www操操操| 国产寡妇亲子伦一区二区| 午夜丝袜av电影| 亚洲视频第一页| 国产精品一二区| 日韩一区二区三区在线视频| 国产精品极品美女在线观看免费| 欧洲精品久久久久毛片完整版| 久久精品视频在线| 日本一区二区三区在线播放| 精品一区二区三区在线观看国产| 蜜芽视频在线观看| 超碰porn在线| 先锋影音男人资源| 成人好色电影| 亚洲.国产.中文慕字在线| 国产av精国产传媒| 欧美激情在线有限公司| 国产 日韩 欧美| 一区二区成人在线| 欧美超级免费视 在线| 黄色永久免费网站| 中文在线中文资源| 国产成人精品久久一区二区小说| 欧美日韩国产精品成人| 成人欧美一区二区三区白人| 成人免费福利视频| 欧美精品激情视频| 红桃视频在线观看一区二区| 亚洲精品在线电影| 中文字幕在线观看一区二区三区| 国产精品高清无码| 天天操天天干天天爱| 色欲综合视频天天天| 午夜激情电影在线播放| 色在人av网站天堂精品| 亚洲AV第二区国产精品| 伊大人久久香线焦宗合一75大| 亚洲精品www久久久久久| 中文字幕av一区二区三区免费看| 国产香蕉久久精品综合网| 欧美日韩精品中文字幕| 天堂中文av| 欧美成人一区二区三区片免费| 先锋影音资源综合在线播放av| 日韩综合在线| 亚洲免费不卡视频| 亚洲日本va| 日韩av电影网址| 欧美成人a∨高清免费观看| 国产在线精品一区二区三区| 在线看片日韩| 91麻豆免费看片| 一本一道久久a久久综合蜜桃| 国产精品久久激情| 图片婷婷一区| 精品国产乱码久久久久久久| 男女激情视频网站| 欧美一级爽aaaaa大片| 亚洲大片一区二区三区| 日韩精品一区二区三区中文在线| 九九九九九九精品| 潘金莲激情呻吟欲求不满视频| 日韩av一区二区三区| 亚洲一本视频| 亚洲国产成人av在线| 国产精品伦理一区| 成年免费在线观看| 涩涩视频网站在线观看| 欧美mv日韩mv国产网站| 亚洲天天影视网| 爱爱免费小视频| 国产成人免费视频网站视频社区| 国产成人免费av一区二区午夜| 波多野结衣家庭教师| 天天舔天天操天天干| 国产精华一区二区三区| 一女被多男玩喷潮视频| 亚洲乱码一区| 国产 欧美 在线| 欧美大香线蕉线伊人久久国产精品| 亚洲精品乱码久久久久久| 日本少妇xxxx| 一道在线中文一区二区三区| 久久久久久香蕉网| 亚洲欧美一区二区三区在线| 深夜福利一区二区三区| 国产狂喷白浆在线观看视频| 欧美日韩一区二区三区四区五区六区| 亚洲精品永久免费| 欧美成人精品高清在线播放| 国产成人亚洲综合91精品| 午夜天堂在线视频| 婷婷激情小说网| 中文字幕在线免费观看视频| 7799精品视频天天看| 欧美日韩大陆在线| 青青青国产在线视频| 国产精品―色哟哟| 日本欧美一区二区| 欧美特黄级在线| 国产ts人妖一区二区| 国产乱人伦精品一区| 国产久草在线| 久久午夜无码鲁丝片午夜精品| 日本韩国欧美超级黄在线观看| 久久久久亚洲AV成人无码国产| 国产一区二区女内射| 怡红院av久久久久久久| 久久精品一区二区三区资源网| 亚洲经典一区二区三区| 爱高潮www亚洲精品| 天堂中文字幕| 亚洲自拍偷拍麻豆| 日韩精品一二| av电影在线观看| 久久久久久高清| 37p粉嫩大胆色噜噜噜| 在线免费看污网站| 欧美视频你懂的| 久久久国产免费| 一级二级三级视频| 91成人影院| 91精品久久久久久久久久久| 国产精品久久久久久久99| 动漫精品一区二区| 国产精品色婷婷久久58| 3d欧美精品动漫xxxx无尽| 日本精品人妻无码77777| 欧美亚洲第一页| 欧美精品色一区二区三区| 成人免费淫片在线费观看| 9l亚洲国产成人精品一区二三| h视频在线网站| 99精品一区二区三区无码吞精| 日韩中文字幕久久| 欧美三级 欧美一级| 欧美日韩在线不卡视频| 日本欧美加勒比视频| 国产精品9191| 不卡区在线中文字幕| 日韩精品一区二区在线播放| 久久精品国产99精品国产亚洲性色| www.av麻豆| 999免费视频| 日韩区在线观看| 国产精品v日韩精品v在线观看| 男人天堂久久久| 久久久久久久久久久一区| 日本中文字幕中出在线| 国产精品视频yy9099| 美日韩一区二区| 一区二区在线看| 国产精品久线在线观看| 四虎影视永久免费在线观看一区二区三区| 影音先锋日韩av| 亚洲无亚洲人成网站77777| 99色在线视频| 97精品免费视频| 中文在线a天堂| 综合亚洲深深色噜噜狠狠网站| 国产精品国产三级国产三级人妇| 日韩大片在线| 伊人免费视频二| 色噜噜狠狠成人中文综合| av黄色在线播放| 日韩一级视频免费观看在线| 日韩精品一卡二卡三卡四卡无卡| 91精品久久久久久久久久另类| 亚洲精品一区中文字幕电影| 成熟妇人a片免费看网站| 国产精品福利在线观看播放| 一本色道无码道dvd在线观看| 人体精品一二三区| 视频在线精品一区| 国产一区二区三区免费| 成人免费毛片男人用品| 中文字幕免费观看视频| 天天干在线视频论坛| 香港三级日本三级| 极品粉嫩美女露脸啪啪| 韩国女主播一区二区三区| 国产美女在线观看| 欧美 日韩 国产精品免费观看| 中文字幕在线一区免费| 欧美精品一区二区三区精品| 久久精品视频播放| 成人黄色短视频在线观看| 亚洲tv在线观看| 亚洲第一激情av| 亚洲欧美日韩综合精品网| 国产精品一二三四五| 男人天堂视频在线| 欧美日韩一区二区区| 欧美xxxx综合视频| 国产三级av片| 久久综合色播| 一卡二卡三卡在线观看| 欧美日韩成人综合| 日韩最新中文字幕| 中文字幕无码乱码人妻日韩精品| 成全视频在线播放大地| 中文字幕亚洲乱码熟女1区2区| 成人免费在线电影网| 国产精品日韩一区二区| 污污视频在线免费看| 5278欧美一区二区三区| 国产超碰97| 欧美激情自拍偷拍| 国产福利小视频在线观看| 亚洲精品永久免费精品| 97中文在线观看| 国产高清精品一区| 欧美人与性动交α欧美精品图片| 久久久人成影片一区二区三区观看| 亚洲第一页在线视频| 欧美午夜精品一区二区三区电影| 成人高清免费在线播放| 美女毛片在线观看| 亚洲www在线观看| 国产精品欧美一区二区三区奶水| 日本韩国欧美在线观看| 精品国产中文字幕第一页| 可骚可骚的黄视频网站| 国产精品极品| 精品国产亚洲一区二区麻豆| 蜜芽在线免费观看| 日本电影全部在线观看网站视频| 欧洲一区在线电影| sqte在线播放| 美女做爰内谢全过程视频| 国产精品九色蝌蚪自拍| 韩国一区二区三区视频| 国产精品成人va在线观看| 久久国产美女视频| 欧美国产日本韩| 免费看毛片的网址| 噜噜噜久久亚洲精品国产品小说| 99在线观看免费视频精品观看| 久久久久久女乱国产| 日韩av免费大片| 国产成人高清在线| 扒开伸进免费视频| 免费久久久久久久久| 国产精品久久久久久久久| 久本草在线中文字幕亚洲欧美| 日韩在线理论| 搡女人真爽免费午夜网站| 久久久久久久亚洲精品| 神马久久久久久久久久久| 欧美精品18videos性欧美| 99不卡视频| 99在线国产| 国外成人福利视频| 嗯用力啊快一点好舒服小柔久久| 操操操com| 91精品人妻一区二区三区蜜桃欧美| 欧美黑人一级片| 无码精品国产一区二区三区免费| 午夜精品无码一区二区三区| 久久久神马电影| 亚洲自拍偷拍一区二区三区| 在线视频日韩一区| 国产一区二区三区丝袜| 午夜精品区一区二区三| 亚洲少妇第一页| 人妻精油按摩bd高清中文字幕| 伊人在线视频| 精品视频91| 欧美激情一区在线观看| 成人午夜看片网址| 天天综合天天添夜夜添狠狠添| 欧美久久天堂| 99热自拍偷拍| 成人免费视频网| 日韩一区二区三区四区五区六区| 精品少妇一区二区三区视频免付费| 青青操视频在线| 欧美一区2区三区4区公司二百| 一本到在线视频| 老牛影视av老牛影视av| 久草一区二区| h精品动漫在线观看| 深夜成人影院| 精品视频999| 久久久久久久电影一区| 7m精品国产导航在线| 九九久久精品一区| 男人猛进猛出女人屁股视频| 国产成人av免费在线观看| 九九视频精品免费| 在线视频手机国产| 亚洲精品视频免费| 都市激情久久久久久久久久久| 91porn在线观看| 波多野结衣家庭教师在线观看| 日韩黄色片网站| 免费观看a级片| 99re在线播放| 小鲜肉gaygays免费动漫| 国产欧美精品日韩区二区麻豆天美| 亚洲国产婷婷综合在线精品| 亚洲图片123| 亚洲国产精品日韩专区av有中文| 精品久久对白| 久热在线观看视频| 一级黄色免费片| 国产一区二区三区在线观看免费视频| 欧美sm美女调教| 性久久久久久久久久久| 9191久久久久久久久久久| 国产午夜视频在线| 亚洲欧洲一区二区天堂久久| 97久久精品| 中文字幕乱码视频| 日韩无码精品一区二区| 色av男人的天堂免费在线| 神马久久影视大全| 精品中国亚洲| 亚洲日本在线观看视频| 一区二区三区四区欧美| 久久一区二区电影| 国产精品国产三级国产专区53| 精品在线播放午夜|