欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁(yè) > 知識(shí)庫(kù) > MySQL 鎖的相關(guān)知識(shí)總結(jié)

MySQL 鎖的相關(guān)知識(shí)總結(jié)

熱門(mén)標(biāo)簽:啥是企業(yè)400電話辦理 南昌三維地圖標(biāo)注 外呼系統(tǒng)打電話上限是多少 曲靖移動(dòng)外呼系統(tǒng)公司 怎樣在地圖標(biāo)注銷(xiāo)售區(qū)域 武漢網(wǎng)絡(luò)外呼系統(tǒng)服務(wù)商 地圖標(biāo)注費(fèi)用是多少 電話外呼系統(tǒng)改號(hào) 百應(yīng)電話機(jī)器人優(yōu)勢(shì)

MySQL中的鎖

鎖是為了解決并發(fā)環(huán)境下資源競(jìng)爭(zhēng)的手段,其中樂(lè)觀并發(fā)控制,悲觀并發(fā)控制和多版本并發(fā)控制是數(shù)據(jù)庫(kù)并發(fā)控制主要采用的技術(shù)手段(具體可見(jiàn)我之前的文章),而MySQL中的鎖就是其中的悲觀并發(fā)控制。

MySQL中的鎖有很多種類,我們可以按照下面方式來(lái)進(jìn)行分類。

按讀寫(xiě)

從數(shù)據(jù)庫(kù)的讀寫(xiě)的角度來(lái)分,數(shù)據(jù)庫(kù)的鎖可以分為分為以下幾種:

  • 獨(dú)占鎖:又稱排它鎖、X鎖、寫(xiě)鎖。X鎖不能和其他鎖兼容,只要有事務(wù)對(duì)數(shù)據(jù)上加了任何鎖,其他事務(wù)就不能對(duì)這些數(shù)據(jù)再放置X了,同時(shí)某個(gè)事務(wù)放置了X鎖之后,其他事務(wù)就不能再加其他任何鎖了,只有獲取排他鎖的事務(wù)是可以對(duì)數(shù)據(jù)進(jìn)行讀取和修改。
  • 共享鎖:又稱讀鎖、S鎖。S鎖與S鎖兼容,可以同時(shí)放置。
  • 更新鎖:又稱U鎖。它允許再加S鎖,但不允許其他事務(wù)再施加U鎖或X鎖,當(dāng)被讀取的數(shù)據(jù)要被更新時(shí),則升級(jí)S鎖為X鎖。U鎖的優(yōu)點(diǎn)是允許事務(wù)A讀取數(shù)據(jù)的同時(shí)不阻塞其它事務(wù),并同時(shí)確保事務(wù)A自從上次讀取數(shù)據(jù)后數(shù)據(jù)沒(méi)有被更改,因此可以減少X鎖和S鎖的沖突,同時(shí)避免使用S鎖后再升級(jí)為X鎖造成的死鎖現(xiàn)象。注意,MySQL并不支持U鎖,SQLServer才支持U鎖。

兼容性矩陣如下(+ 代表兼容, -代表不兼容)

右側(cè)是已加的鎖 X S U
X - - -
S - + +
U - + -

按粒度

MySQL支持不同級(jí)別的鎖,其鎖定的數(shù)據(jù)的范圍也不同,也即我們常說(shuō)的鎖的粒度。MySQL有三種鎖級(jí)別:行級(jí)鎖、頁(yè)級(jí)鎖、表級(jí)鎖。不同的存儲(chǔ)引擎支持不同的鎖粒度,例如MyISAM和MEMORY存儲(chǔ)引擎采用的是表級(jí)鎖,頁(yè)級(jí)鎖僅被BDB存儲(chǔ)引擎支持,InnoDB存儲(chǔ)引擎支持行級(jí)鎖和表級(jí)鎖,默認(rèn)情況下是采用行級(jí)鎖。

特點(diǎn)

表級(jí)鎖:開(kāi)銷(xiāo)小,加鎖快;不會(huì)出現(xiàn)死鎖;鎖定粒度大,發(fā)生鎖沖突的概率最高,并發(fā)度最低。數(shù)據(jù)庫(kù)引擎總是一次性同時(shí)獲取所有需要的鎖以及總是按相同的順序獲取表鎖從而避免死鎖。
行級(jí)鎖:開(kāi)銷(xiāo)大,加鎖慢;會(huì)出現(xiàn)死鎖;鎖定粒度最小,發(fā)生鎖沖突的概率最低,并發(fā)度也最高。行鎖總是逐步獲得的,因此會(huì)出現(xiàn)死鎖。
頁(yè)面鎖:開(kāi)銷(xiāo)和加鎖時(shí)間界于表鎖和行鎖之間;會(huì)出現(xiàn)死鎖;鎖定粒度界于表鎖和行鎖之間,并發(fā)度一般。

下面詳細(xì)介紹行鎖和表鎖,頁(yè)鎖由于使用得較少就不介紹了。

行鎖

按行對(duì)數(shù)據(jù)進(jìn)行加鎖。InnoDB行鎖是通過(guò)給索引上的索引項(xiàng)加鎖來(lái)實(shí)現(xiàn)的,Innodb一定存在聚簇索引,行鎖最終都會(huì)落到聚簇索引上,通過(guò)非聚簇索引查詢的時(shí)候,先鎖非聚簇索引,然后再鎖聚簇索引。如果一個(gè)where語(yǔ)句里面既有聚簇索引,又有二級(jí)索引,則會(huì)先鎖聚簇索引,再鎖二級(jí)索引。由于是分步加鎖的,因此可能會(huì)有死鎖發(fā)生。

MySQL的行鎖對(duì)S、X鎖上做了一些更精確的細(xì)分,使得行鎖的粒度更細(xì)小,可以減少?zèng)_突,這就是被稱為“precise mode”的兼容矩陣。(該矩陣沒(méi)有出現(xiàn)在官方文檔上,是有人通過(guò)Mysql lock0lock.c:lock_rec_has_to_wait源代碼推測(cè)出來(lái)的。)

行鎖兼容矩陣

  • 間隙鎖(Gap Lock):只鎖間隙,前開(kāi)后開(kāi)區(qū)間(a,b),對(duì)索引的間隙加鎖,防止其他事務(wù)插入數(shù)據(jù)。
  • 記錄鎖(Record Lock):只鎖記錄,特定幾行記錄。
  • 臨鍵鎖(Next-Key Lock):同時(shí)鎖住記錄和間隙,前開(kāi)后閉區(qū)間(a,b]。
  • 插入意圖鎖(Insert Intention Lock):插入時(shí)使用的鎖。在代碼中,插入意圖鎖,實(shí)際上是GAP鎖上加了一個(gè)LOCK_INSERT_INTENTION的標(biāo)記。

右側(cè)是已加的鎖(+ 代表兼容, -代表不兼容) G R N I
G + + + +
R + +
N + +
I + +

S鎖和S鎖是完全兼容的,因此在判別兼容性時(shí)不需要對(duì)比精確模式。精確模式的檢測(cè),用在S、X和X、X之間。從這個(gè)矩陣可以看到幾個(gè)特點(diǎn):

  • INSERT操作之間不會(huì)有沖突:你插入你的,我插入我的。
  • GAP,Next-Key會(huì)阻止Insert:插入的數(shù)據(jù)正好在區(qū)間內(nèi),不允許插入。
  • GAP和Record,Next-Key不會(huì)沖突
  • Record和Record、Next-Key之間相互沖突。
  • 已有的Insert鎖不阻止任何準(zhǔn)備加的鎖。
  • 間隙鎖(無(wú)論是S還是X)只會(huì)阻塞insert操作。

注意點(diǎn)

  • 對(duì)于記錄鎖,列必須是唯一索引列或者主鍵列,查詢語(yǔ)句必須為精確匹配,如“=”,否則記錄鎖會(huì)退化為臨鍵鎖。
  • 間隙鎖和臨鍵鎖基于非唯一索引,在唯一索引列上不存在間隙鎖和臨鍵鎖。

表鎖與鎖表的誤區(qū)

只有正確通過(guò)索引條件檢索數(shù)據(jù)(沒(méi)有索引失效的情況),InnoDB才會(huì)使用行級(jí)鎖,否則InnoDB對(duì)表中的所有記錄加鎖,也就是將鎖住整個(gè)表。注意,這里說(shuō)的是鎖住整個(gè)表,但是Innodb并不是使用表鎖來(lái)鎖住表的,而是使用了下面介紹的Next-Key Lock來(lái)鎖住整個(gè)表。網(wǎng)上很多的說(shuō)法都是說(shuō)用表鎖,然而實(shí)際上并不是,我們可以通過(guò)下面的例子來(lái)看看。

假設(shè)我們有以下的數(shù)據(jù)(MySQL8):

mysql> select * from users;
+----+------+-----+
| id | name | age |
+----+------+-----+
| 1 | a  | 1  |
| 2 | a  | 1  |
| 3 | a  | 1  |
| 4 | a  | 1  |
| 5 | a  | 1  |
+----+------+-----+

方法一:

我們使用表鎖鎖表,并查看引擎的狀態(tài)

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> lock tables users write;
Query OK, 0 rows affected (0.00 sec)

mysql> show engine innodb status\G
...
------------
TRANSACTIONS
------------
Trx id counter 4863
Purge done for trx's n:o  4862 undo n:o  0 state: running but idle
History list length 911
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 281479760456232, not started
mysql tables in use 1, locked 1  ###############注意這里
0 lock struct(s), heap size 1136, 0 row lock(s)
...

然后我們?cè)偻ㄟ^(guò)非索引的字段查詢來(lái)加鎖,并查看引擎的狀態(tài)

## 先解鎖上次的表鎖
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from users where name = 'a' for update;

mysql> show engine innodb status\G
...
------------
TRANSACTIONS
------------
Trx id counter 4864
Purge done for trx's n:o  4862 undo n:o  0 state: running but idle
History list length 911
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 4863, ACTIVE 37 sec
2 lock struct(s), heap size 1136, 6 row lock(s)  ###############注意這里
...

然后我們?cè)賱h除id為2,3,4的數(shù)據(jù),然后在通過(guò)非索引的字段查詢來(lái)加鎖,并查看引擎的狀態(tài)

mysql> delete from users where id in (2,3,4);
Query OK, 3 rows affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from users where name = 'a' for update;

mysql> show engine innodb status\G
...
------------
TRANSACTIONS
------------
Trx id counter 4870
Purge done for trx's n:o  4869 undo n:o  0 state: running but idle
History list length 914
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 4869, ACTIVE 9 sec
2 lock struct(s), heap size 1136, 3 row lock(s)  ###############注意這里
...

可以看到這里使用了表鎖和因?yàn)闆](méi)法用索引鎖定特定行而轉(zhuǎn)而鎖住整個(gè)表是不一樣的。從第二次和第三次的操作來(lái)看,lock住的row也是不同的,這是因?yàn)閮烧唛g隙的個(gè)數(shù)不同,所以可以看到使用的并不是表鎖,而是Next-Key Lock。第一次鎖住了(-∞,1],(1,2],(2,3],(3,4],(4,5],(5,∞],第二次鎖住了(-∞,1],(1,5],(5,∞]。

方法二:

也可以通過(guò)以下語(yǔ)句來(lái)查看鎖的信息,也可以知道用的是行鎖,且是鎖住了區(qū)間(插入不了數(shù)據(jù))和記錄,所以是Next-Key Lock。

mysql> select ENGINE_TRANSACTION_ID,LOCK_TYPE,LOCK_MODE from performance_schema.data_locks where ENGINE_TRANSACTION_ID in (你的事務(wù)id);
+-----------------------+-----------+-----------+
| ENGINE_TRANSACTION_ID | LOCK_TYPE | LOCK_MODE |
+-----------------------+-----------+-----------+
|         4889 | TABLE   | IX    |
|         4889 | RECORD  | X     |
|         4889 | RECORD  | X     |
|         4889 | RECORD  | X     |
+-----------------------+-----------+-----------+
10 rows in set (0.00 sec)

LOCK_TYPE:對(duì)于InnoDB,可選值為 RECORD(行鎖), TABLE(表鎖)

LOCK_MODE:對(duì)于InnoDB,可選值為S[,GAP], X[,GAP], IS[,GAP],IX[,GAP], AUTO_INC和UNKNOWN。除了AUTO_INC和UNKNOWN,其他鎖定模式都包含了GAP鎖(如果存在)。

具體可見(jiàn) MySQL文檔:https://dev.mysql.com/doc/ref...

表級(jí)鎖

直接對(duì)整個(gè)表加鎖,影響表中所有記錄,表讀鎖和表寫(xiě)鎖的兼容性見(jiàn)上面的分析。

MySQL中除了表讀鎖和表寫(xiě)鎖之外,還存在一種特殊的表鎖:意向鎖,這是為了解決不同粒度的鎖的兼容性判斷而存在的。

意向鎖

因?yàn)殒i的粒度不同,表鎖的范圍覆蓋了行鎖的范圍,所以表鎖和行鎖會(huì)產(chǎn)生沖突,例如事務(wù)A對(duì)表中某一行數(shù)據(jù)加了行鎖,然后事務(wù)B想加表鎖,正常來(lái)說(shuō)是應(yīng)該要沖突的。如果只有行鎖的話,要判斷是否沖突就得遍歷每一行數(shù)據(jù)了,這樣的效率實(shí)在不高,因此我們就有了意向表鎖。

意向鎖的主要目的是為了使得 行鎖 和 表鎖 共存,事務(wù)在申請(qǐng)行鎖前,必須先申請(qǐng)表的意向鎖,成功后再申請(qǐng)行鎖。注意:申請(qǐng)意向鎖的動(dòng)作是數(shù)據(jù)庫(kù)完成的,不需要開(kāi)發(fā)者來(lái)申請(qǐng)。

意向鎖是表級(jí)鎖,但是卻表示事務(wù)正在讀或?qū)懩骋恍杏涗洠皇钦麄€(gè)表, 所以意向鎖之間不會(huì)產(chǎn)生沖突,真正的沖突在加行鎖時(shí)檢查。

意向鎖分為意向讀鎖(IS)和意向?qū)戞i(IX)。

表鎖的兼容性矩陣

右側(cè)是已加的鎖(+ 代表兼容, -代表不兼容) IS IX S X
IS + + +
IX + +
S + +
X

以上就是MySQL 鎖的相關(guān)知識(shí)總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于MySQL 鎖的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • Mysql事務(wù)中Update是否會(huì)鎖表?
  • MySQL數(shù)據(jù)庫(kù)鎖機(jī)制原理解析
  • mysql查看死鎖與去除死鎖示例詳解
  • MySQL死鎖檢查處理的正常方法
  • mysql查詢表是否被鎖的方法
  • 通過(guò)實(shí)例判斷mysql update是否會(huì)鎖表
  • MySQL中的悲觀鎖與樂(lè)觀鎖
  • MySQL 行鎖和表鎖的含義及區(qū)別詳解
  • mysql 悲觀鎖與樂(lè)觀鎖的理解及應(yīng)用分析
  • MySQL 8.0.19支持輸入3次錯(cuò)誤密碼鎖定賬戶功能(例子)

標(biāo)簽:黑河 吉林 錦州 滄州 隨州 資陽(yáng) 甘南 荊州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL 鎖的相關(guān)知識(shí)總結(jié)》,本文關(guān)鍵詞  MySQL,鎖,的,相關(guān),知識(shí),總結(jié),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL 鎖的相關(guān)知識(shí)總結(jié)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于MySQL 鎖的相關(guān)知識(shí)總結(jié)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    免费a在线观看播放| 日本精品在线免费观看| 色婷婷综合久久久久中文一区二区| ww亚洲ww在线观看国产| 日韩高清国产一区在线| 日韩综合第一页| 欧美情侣在线播放| 无码av免费一区二区三区试看| 亚洲成人福利视频| 欧美最猛性xxxxx直播| 亚洲免费av高清| 91蜜桃在线观看| 欧美亚洲国产怡红院影院| 亚洲精品乱码久久久久久日本蜜臀| 91在线视频在线| 欧美亚洲国产怡红院影院| 亚洲一区二区三区免费视频| 丰满人妻一区二区三区免费视频棣| 欧美三级中文字| 亚洲成a人v欧美综合天堂下载| 69xxx免费视频| 欧美一二三四区在线| 奇米影视一区二区三区小说| 中文字幕丰满乱子伦无码专区| 欧美va亚洲va国产综合| 久久99国产精品麻豆| 人妻互换一区二区激情偷拍| 亚洲国产岛国毛片在线| 成人的网站免费观看| 欧美亚洲国产一区在线观看网站| 亚洲国产精品自拍| 扒开jk护士狂揉免费| 久久久午夜精品理论片中文字幕| 成人理论电影网| av在线免费观看不卡| 中文字幕乱码在线| 精品久久99ma| 国产不卡高清在线观看视频| 色综合天天综合狠狠| 亚洲一区国产视频| aa片在线观看视频在线播放| 精品成人在线观看| 国产99久久久国产精品免费看| 波多野结衣喷潮| 亚洲伦理在线免费看| 丰满岳乱妇一区二区| 精品少妇一区二区三区在线视频| 久久精品噜噜噜成人av农村| 国精产品久拍自产在线网站| 一区二区三区高清不卡| 欧美bbbbb性bbbbb视频| 国产日韩av一区| 美女又黄又免费的视频| 精品国产伦一区二区三区免费| 国产成人福利片| 欧美三级视频在线| 经典三级视频一区| 色诱亚洲精品久久久久久| 亚洲va国产天堂va久久en| 你懂得视频在线观看| 亚洲精品久久久蜜桃| 波多野结衣 在线| 自拍偷拍国产亚洲| 性少妇bbw张开| 伊人色综合久久天天| 少妇久久久久久久久久| 亚洲欧洲综合另类在线| 91视频免费观看网站| 亚洲三级电影网站| 男女做爰猛烈刺激| 一区二区三区在线视频观看| 国产毛片久久久久久久| 亚洲一区二区三区中文字幕| 日本人亚洲人jjzzjjz| 亚洲一区视频在线| 青花影视在线观看免费高清| 亚洲成人久久影院| 91视频综合网| 久久国产三级精品| 欧美日韩一区二区三区四区| 国产一区视频在线看| 欧美日韩免费视频| 风间由美中文字幕在线看视频国产欧美| 91精品国产综合久久香蕉麻豆| 成人少妇影院yyyy| 精品成人佐山爱一区二区| 特级特黄刘亦菲aaa级| 国产精品免费观看视频| 成人免费无遮挡无码黄漫视频| 一区二区三区在线视频播放| 永久av免费网站| 六月丁香婷婷久久| 在线成人av网站| 99re热这里只有精品免费视频| 久久久久久久久久久久久久久99| 怡红院一区二区| 亚洲女人小视频在线观看| 91麻豆制片厂| 免费在线观看一区| 6080日韩午夜伦伦午夜伦| av中文字幕在线不卡| 日本一区二区成人| 在线观看免费黄色网址| 日韩二区三区四区| 欧美电影一区二区三区| 99久久99久久免费精品蜜臀| 中文字幕成人在线观看| 91激情视频在线观看| 日韩在线一区二区| 欧美人狂配大交3d怪物一区| 91在线无精精品入口| 成人欧美一区二区三区视频网页| 国产激情av在线| 久久99热这里只有精品| 日韩一区二区影院| 7788色淫网站小说| 午夜视频一区二区| 欧美日韩成人一区二区| 国产探花一区二区三区| 亚洲激情图片一区| 欧美性生活大片视频| 99久久国产综合精品色伊| 最近日韩中文字幕| 一本久久综合亚洲鲁鲁五月天| 国产成人精品三级| 国产精品二三区| 国语对白在线播放| jizz一区二区| 亚洲男人的天堂网| 91精品办公室少妇高潮对白| 成人激情开心网| 国产精品久久久99| 色综合欧美在线| 91网站视频在线观看| 精品国产视频在线观看| 国产乱码字幕精品高清av| 久久久久国产精品人| 国产第一页精品| 丁香另类激情小说| 亚洲日本韩国一区| 欧美日韩一区三区四区| 四虎永久免费观看| 日本中文在线一区| 欧美精品一区二区高清在线观看| 一区二区黄色片| 国内精品伊人久久久久影院对白| 久久久亚洲精品石原莉奈| 青青青视频在线免费观看| 东方欧美亚洲色图在线| 亚洲靠逼com| 4438x成人网最大色成网站| 三级黄色片网站| 国产激情一区二区三区| 国产精品久久久久毛片软件| 色哟哟一区二区在线观看| 国产在线a视频| 日韩精品乱码免费| 久久婷婷久久一区二区三区| 国产探花在线视频| 制服下的诱惑暮生| 秋霞成人午夜伦在线观看| 久久久亚洲午夜电影| 色综合久久久久| 李丽珍裸体午夜理伦片| 久久国产日韩欧美精品| 国产精品伦一区| 欧美日韩三级一区| 欧美性受xxxx黑人| 99久久国产综合色|国产精品| 亚洲18色成人| 久久久久国产精品免费免费搜索| 91网站免费入口| 欧美熟妇激情一区二区三区| 亚洲AV无码久久精品国产一区| 国产拍揄自揄精品视频麻豆| 一本一道久久a久久精品综合蜜臀| 俄罗斯女人裸体性做爰| 老司机精品视频导航| 国产精品麻豆一区二区| 欧美日韩国产中文| 日韩av片在线免费观看| 在线播放国产视频| 精品午夜一区二区三区在线观看| 日韩一区中文字幕| 日韩女优av电影| 色婷婷国产精品| 超碰97在线资源站| 国产91综合一区在线观看| 午夜视频在线观看一区二区 | 欧美aaaaaa午夜精品| 中文字幕欧美激情| 欧美一级一区二区| 9.1人成人免费视频网站| 西西大胆午夜视频| 成人app在线| 精品一区二区在线看| 一区二区三区欧美亚洲| 久久一区二区三区四区| 欧美日韩一区二区三区四区五区| а天堂中文在线资源|