日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 數據庫 > MySQL > 正文

mysql中的鎖機制深入講解

2024-07-25 19:09:16
字體:
來源:轉載
供稿:網友

前言

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

大概幾個月之前項目中用到事務,需要保證數據的強一致性,期間也用到了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_examplewhere 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下會失效;

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


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
天堂在线中文| 日韩精品一二三四区| 中文字幕欧美日韩在线不卡| 一区二区视频在线| 一区视频在线播放| 欧美高清一级片在线| 国产性一级片| 最新日韩中文字幕| 欧美中日韩在线| 欧美亚洲天堂网| 久久福利视频一区二区| 中文字幕五月天| 日韩一级免费视频| 中文字幕在线观看亚洲| 欧美日韩精品中文字幕| 久久视频免费看| 一区二区精品免费| 日韩一级中文字幕| 在线视频1区2区| 欧美日韩成人一区二区| 日韩在线不卡一区| 国产区高清在线| 中文亚洲免费| 欧美变态tickling挠脚心| 日韩欧美不卡| 欧美日韩国产123区| 日韩中文字幕| 日韩欧美一二三区| 欧美日韩免费视频| 国产123在线| 国产在线小视频| 国产成人精品999在线观看| 91欧美日韩在线| 亚洲中午字幕| 中文字幕亚洲第一| 第一页在线观看| 欧美日韩三级在线| 中文字幕在线国产| 欧美日韩中文精品| 91精品久久久久| 国产网站av| 国产三级中文字幕| www中文字幕在线观看| 黄色国产在线| 亚洲视频在线观看日本a| 日韩在线视频一区二区三区| www.av中文字幕| 欧美日韩亚洲综合在线| 亚洲国产午夜精品| 日韩欧美在线字幕| 日韩精品乱码av一区二区| 欧美日韩性视频在线| 中文字幕国产欧美| 国产成人精品999在线观看| 亚洲综合在线中文字幕| 欧美不卡一二三| 久久久久久欧美| 日本精品免费观看高清观看| 亚洲三级中文字幕| 国产欧美久久久久久久久| 中文字幕 亚洲视频| 日韩欧美国产黄色| 精品国产免费视频| 日本熟女一区二区| www.狠狠干| 欧美日韩国产影片| 精品一二三四区| 欧美日韩高清在线| 欧美日韩国产中文精品字幕自在自线 | 91精品观看| 樱花草www在线| 国产v日产∨综合v精品视频| 日韩亚洲欧美中文三级| 欧美日韩三级一区| 日韩高清在线不卡| 亚洲国产午夜精品| 伊人亚洲视频| 91精品国产综合久久香蕉的特点| 欧美日韩国产免费观看视频| 黄色国产网站在线观看| 高清1区2区| 精品播放一区二区| 国产天堂素人系列在线视频| 欧美不卡123| 欧美日韩国产黄色| 日韩三级高清在线| 欧美日韩国产一区在线| 国产偷久久久精品专区| 在线亚洲人成| 91久久精品在线| 日韩视频精品在线| 亚洲影视资源网| 国产一区 二区 三区一级| 日韩欧美在线1卡| 婷婷综合福利| 蜜桃久久av一区| 日韩在线观看视频一区二区| 中文字幕在线看精品乱码| 中文字幕一区不卡| 中文字幕在线日韩| 国产激情在线观看| 亚洲a一级视频| 日韩中文字幕在线观看视频| 亚洲一区中文字幕在线观看| av免费不卡国产观看| 国产欧美日韩亚洲| 国产香蕉精品视频| 日韩欧美一二三| 欧美日韩国产91| 韩国v欧美v日本v亚洲| 欧美亚洲国产日韩2020| 在线欧美日韩精品| 亚洲第一精品在线| 欧美日韩国产999| 国产久卡久卡久卡久卡视频精品 | 日本精品福利视频| 九九视频精品免费| 欧美日韩中文字幕视频| 欧美 中文字幕| 红桃视频亚洲| 亚洲综合中文字幕在线| 日韩中文欧美在线| 欧美日韩国产在线看| 午夜国产视频 | 天天综合天天做| 91吃瓜在线观看| 日韩精品在线观看网站| 精品久久久视频| 日韩在线高清视频| 亚洲欧美韩国综合色| 欧美日韩中文字幕精品| 91精品国产91久久久久久三级| 欧美日韩国产在线| 日韩在线精品视频| 欧美一卡2卡3卡4卡| 国产一卡2卡3卡4卡网站免费| 亚洲国产综合久久| 国产欧美第一页| 久久91精品久久久久久秒播| 欧美久久久精品| 欧美日韩一级视频| а√天堂中文在线资源8| 欧美日韩综合在线观看| 中文字幕无线码一区| 精品欧美久久久| 在线一区免费| 国产黄色片中文字幕| 日韩三级视频在线看| 在线看av的网址| 亚洲午夜91| 区日韩二区欧美三区| 欧美三级三级三级爽爽爽| 欧美国产小视频| 色综合天天综合网国产成人综合天| 国产在线www| 中文字幕日韩精品在线| 亚洲大片免费看| 99精品一级欧美片免费播放| 欧美日韩国产亚洲一区| 中文字幕在线官网| 婷婷中文字幕一区三区| 国产日韩精品电影| 国产在线拍揄自揄拍| 欧美日韩国产首页在线观看| 91精品久久久久久久久| 欧美日韩亚洲一| 国产在线欧美| 久艹在线视频| 免费视频中文字幕| 国产亚洲人成a一在线v站| 久久婷婷国产| 国产成人精品综合久久久| 男人的天堂网av| 欧美日韩在线看| 欧美日韩精品免费| 亚洲国产www| 精品网站999www| 色猫猫国产区一区二在线视频| 亚洲久草视频| 国产色在线视频| 中文字幕在线国产| 欧美日韩亚洲国内综合网俺| 中文字幕亚洲区| 亚洲第一中文字幕在线观看| 欧美激情一区二区在线| 成人久久在线| 欧美变态tickling挠脚心| 国产在线精品国自产拍免费| 一区二区三区免费看视频| 国产极品嫩模在线视频一区| 欧美日韩综合不卡| 亚洲一区二区三区精品中文字幕| 亚洲狠狠婷婷综合久久久久图片| 精品精品久久| 欧美日韩性视频一区二区三区| 国产手机视频一区二区| 国产永久在线观看| 最近中文av字幕在线中文| 久久精品黄色片| 国产极品嫩模在线视频一区| 日韩中文首页| 欧美日韩中文字幕视频| 国产裸体歌舞团一区二区| 视频一区二区国产| 91精品国产自产在线观看永久∴| 欧美国产一级片| 欧美日韩精品电影| 日韩中文字幕| 国产福利在线播放| 国产不卡精品在线| 精品久久久久久无| 日韩亚洲国产欧美| av免费在线不卡| 久久久久久99精品| 国产v日产∨综合v精品视频| 国产 中文 字幕 日韩 在线| 日韩欧美中文字幕在线观看| 日韩视频中文| 欧美日韩高清| 午夜黄色小视频| 日韩国产在线不卡视频| 九九视频精品免费| 国产免费永久在线观看| av高清一区| 成人久久久久| 一区二区三区精品99久久| 美女黄a一级视频| 国产日产一区二区三区| 日韩欧美看国产| 精品日韩欧美| 日韩精品久久久| 91久久大香伊蕉在人线| 国产v日产∨综合v精品视频| 欧美日韩激情一区二区三区| 欧美 日韩 国产在线| 精品国产综合久久| 日韩三级高清在线| 中文字幕日韩第一页| 日韩中文字幕在线播放| 国产免费电影网站入口| 亚洲欧美999| 国产免费电影网站入口| 日韩在线中文字幕| 国产欧美日韩在线观看| 国产手机精品视频| 国产免费久久久| 国产日韩中文在线| 欧美在线视频第一页| aaa大片在线观看| 日韩免费看网站| 欧美日韩精品在线视频| 中文字幕日韩免费视频| 91久久精品视频| 亚洲成av人综合在线观看| 亚洲免费福利视频| 亚洲乱码中文字幕综合| 国产永久免费高清在线观看| 日韩欧美在线看| 粉嫩粉嫩芽的虎白女18在线视频| 国产在线第一页| 91精品国产综合久久久久| 亚洲一区二区三区精品中文字幕| 在线欧美日韩国产| 精品视频1区2区3区| 国产欧美日韩精品在线| 久久久91精品| 欧美日韩一级视频| 中文字幕精品一区二| 精品在线一区二区三区| 在线视频亚洲| 婷婷中文字幕综合| 日韩欧美在线字幕| 久久精品不卡| 欧美日韩第一区日日骚| 欧美亚洲视频在线看网址| 日韩不卡一区二区| 国产区在线看| 亚洲欧美99| 国产在线一在线二| 精品熟女一区二区三区| 国产在线精品日韩| 欧美一级手机免费观看片| 亚洲男人在线| 在线日韩中文| 国产偷国产偷亚洲清高网站| 国产成人精品免费在线| 国产日韩三级| 国产丝袜在线播放| av免费观看国产| 欧美日韩不卡在线视频| 中文字幕在线观看视频www| 天堂在线中文| 欧美日韩综合在线免费观看| 国产三级视频网站| 在线视频第一页| 亚洲免费精品| 中文字幕欧美日韩在线不卡| 97天天综合网| 亚洲第一中文字幕| 亚洲成av人片一区二区密柚| 久久99精品国产| 国产日韩av一区二区| 快she精品国产999| 日韩中文字幕视频在线| 亚洲福利精品在线| 1区2区在线| 搞黄在线观看| aaa欧美日韩| 亚洲乱码视频| 国产成人精品网址| 精品久久久视频| 日韩视频1区| 精品在线网站观看| 亚洲欧洲一区二区天堂久久| 亚洲一区在线观看网站| 亚洲 欧美综合在线网络| 亚洲一区在线观看免费| √天堂资源中文www| 日韩视频 中文字幕| 精品一二三四| 欧美日韩在线视频免费观看| 91精品国产综合久久久久久| 亚洲校园欧美国产另类| 欧美中文字幕在线观看视频| 精品国产免费视频| 亚洲综合日韩中文字幕v在线| 久久久精品福利| 欧美国产综合视频| 欧美日韩综合在线观看| 97最新国自产拍视频在线完整在线看| 免费高清在线一区| 国产区视频在线观看| 欧美日韩中文字幕视频| 7799精品视频天天看| 亚洲第一页中文字幕| 中文字幕 亚洲一区| 中文字幕在线亚洲| 最近中文字幕第一页| 91精品久久久久| 亚洲影视资源网| 午夜高潮免费视频| 一区二区视频在线| 精品日韩av一区二区| 日韩中文字幕在线观看视频| 精品福利一区二区三区| av手机天堂| 日韩欧美高清在线视频| 欧美日韩国产免费| 国产一级久久久| 视频一区不卡| 日韩欧美一级二级三级久久久| 一区视频在线播放| 香蕉精品久久| 日韩在线高清| 最新中文字幕在线播放| 亚洲黄色www| 国产福利一区二区| 久久精品一二三| 91精品国产全国免费观看 | 日韩欧美在线视频| 欧美日韩国产在线观看| 亚洲欧洲日产国码av系列天堂| 免费视频最近日韩| 69免费视频| 偷窥国产亚洲免费视频| 阿v免费在线观看| 国产午夜精品视频免费不卡69堂 | 欧美日中文字幕| 国产在线不卡一区| 精品人妻一区二区免费视频| 日韩中文字幕在线视频观看| 国产在线不卡av| av一区在线| 国产一二三区精品视频| 久久久久蜜桃| 最近中文字幕在线中文高清版| 中文字幕在线观看播放| 免费精品国产自产拍在| 国产123在线| aaa欧美日韩| 日韩久久精品视频| 亚洲国产福利视频| 91精品国产免费| 精品日韩视频| 日韩精品午夜| 国产在线看一区| 精品999在线| 亚洲欧美999| 日韩在线视频网| 日本xxxwww免费视频| 91精品国产免费| 日韩欧美一卡二卡| 91久久在线| 国产在线观看色| 在线观看精品国产| 久久蜜桃一区二区| 日韩国产欧美三级| 日韩福利视频导航| 视频一区二区中文字幕| 91精品网站|