成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

不能再簡(jiǎn)單的意向鎖

數(shù)據(jù)庫(kù) SQL Server
為了使多粒度級(jí)別的鎖定變得實(shí)用,InnoDB 使用了意向鎖,注意,意向鎖是一種表級(jí)鎖,它表示事務(wù)稍后對(duì)表中的行需要哪種類(lèi)型的鎖(共享或獨(dú)占)。

InnoDB 存儲(chǔ)引擎支持多粒度鎖(multiple granularity locking),也就是允許行鎖和表鎖共存。當(dāng)允許行鎖和表鎖共存的時(shí)候,可能會(huì)存在下面這樣一個(gè)問(wèn)題:

例如我執(zhí)行如下 SQL:

這段 SQL 執(zhí)行完成后,給 id 為 1 的記錄加了排他鎖。

此時(shí),在另外一個(gè)會(huì)話(huà)中,我如果想給這張表再來(lái)一個(gè)表級(jí)共享鎖,如下:

lock table user read;

此時(shí)就會(huì)有一個(gè)問(wèn)題,共享鎖和排他鎖是互斥的,要給表上共享鎖,就得去檢查一下表中的每一條記錄都不存在排他鎖,如果表中的數(shù)據(jù)量比較大,這個(gè)操作效率就會(huì)比較低。

為了解決這個(gè)問(wèn)題,就引出了我們今天的意向鎖。為了使多粒度級(jí)別的鎖定變得實(shí)用,InnoDB 使用了意向鎖,注意,意向鎖是一種表級(jí)鎖,它表示事務(wù)稍后對(duì)表中的行需要哪種類(lèi)型的鎖(共享或獨(dú)占)。

意向鎖也分為兩類(lèi):

  • intention shared lock:意向共享鎖 (IS) 表示事務(wù)打算在表中的各個(gè)行上設(shè)置共享鎖。
  • intention exclusive lock:意向排他鎖 (IX) 表示事務(wù)打算對(duì)表中的各個(gè)行設(shè)置排他鎖。

例如,對(duì)于 SELECT ... LOCK IN SHARE MODE; 會(huì)自動(dòng)設(shè)置 IS 鎖,對(duì)于 SELECT ... FOR UPDATE 會(huì)自動(dòng)設(shè)置 IX 鎖,并且 IS 鎖和 IX 鎖不需要手動(dòng)設(shè)置,這個(gè)是由系統(tǒng)自動(dòng)設(shè)置。

意向鎖的加鎖規(guī)則如下:

  • 在事務(wù)可以獲取表中行的共享鎖之前,它必須首先獲取表上的 IS 鎖或更強(qiáng)的鎖。
  • 在事務(wù)可以獲取表中行的排他鎖之前,它必須首先獲取表上的 IX 鎖。

簡(jiǎn)而言之:IS 和 IX 是表鎖,它們存在的意義在于,將來(lái)給表上表級(jí)的 S 鎖或者 X 鎖的時(shí)候,可以通過(guò) IS 或者 IX 快速判斷出當(dāng)前表中是否已經(jīng)有加鎖記錄了,僅此而已。所以 IS 和 IX 之間其實(shí)是兼容的,IX 之間也是兼容的,如下表:

但是意向鎖和表級(jí)鎖則有可能沖突,如下:

上面這張表也好理解:

  • 如果表上有 IS,說(shuō)明表中的記錄有共享鎖,此時(shí)就不可以給表加排他鎖(X 鎖),但是可以給表加共享鎖(S 鎖)。
  • 如果表上有 IX,說(shuō)明表中的記錄有排他鎖,此時(shí)就不可以給表加排他鎖(X 鎖),也不可以給表加共享鎖(S 鎖)。

整體上來(lái)說(shuō),兼容關(guān)系如下表:

由于意向鎖并不需要我們手動(dòng)添加,那么有沒(méi)有辦法讓我們看到意向鎖呢?可以的。

首先我們將系統(tǒng)變量 innodb_status_output_locks 設(shè)置為 ON,如下:

接下來(lái)我們執(zhí)行如下 SQL,鎖定一行數(shù)據(jù),此時(shí)會(huì)自動(dòng)為表加上 IX 鎖:

接下來(lái)我們?cè)谝粋€(gè)新的會(huì)話(huà)中執(zhí)行如下指令來(lái)查看 InnoDB 存儲(chǔ)引擎的情況:

show engine innodb status\G

輸出的信息很多,我們重點(diǎn)關(guān)注 TRANSACTIONS,如下:

可以看到:

  • TABLE LOCK table test08.user trx id 3564804 lock mode IX:這句就是說(shuō)事務(wù) id 為 3564804 的事務(wù),為 user 表添加了意向排他鎖(IX)。
  • RECORD LOCKS space id 851 page no 3 n bits 80 index PRIMARY of table test08.user trx id 3564804 lock_mode X locks rec but not gap:這個(gè)就是一個(gè)鎖結(jié)構(gòu)的記錄,這里的索引是 PRIMARY,加的鎖也是正兒八經(jīng)的記錄鎖(not gap),因?yàn)樗饕?PRIMARY,所以這里沒(méi)有間隙鎖,關(guān)于間隙鎖,咱們下篇文章繼續(xù)。

好啦,希望今天這篇文章能讓小伙伴們對(duì)意向鎖有一個(gè)簡(jiǎn)單的認(rèn)知。

責(zé)任編輯:趙寧寧 來(lái)源: 江南一點(diǎn)雨
相關(guān)推薦

2024-05-15 09:23:45

MySQL排他鎖共享鎖

2023-07-03 08:15:46

MySQLInnoDB

2025-06-04 02:55:00

MySQL意向鎖記錄鎖

2023-12-28 17:33:25

意向鎖MySQL開(kāi)發(fā)者

2022-11-28 14:27:17

插入意向鎖age

2024-10-30 10:38:08

2022-12-27 17:40:57

意向鎖MySQLInnoDB

2022-07-20 08:06:57

MySQL表鎖Innodb

2017-08-30 18:15:54

MySql

2012-06-12 14:23:02

面向?qū)ο?/a>編程開(kāi)發(fā)

2017-06-07 12:33:46

智慧工業(yè)智慧醫(yī)療人工智能

2011-06-02 14:29:40

2021-05-25 05:25:24

MySQL數(shù)據(jù)庫(kù)

2022-06-02 13:20:23

數(shù)字化技術(shù)

2018-10-23 14:50:24

Linux操作系統(tǒng)Linus

2020-09-01 07:36:29

分布式鎖分布式進(jìn)程

2020-07-15 07:49:20

JavaScriptReact代碼

2013-09-12 16:44:39

思科固態(tài)存儲(chǔ)WHIPTAIL

2020-09-03 11:10:34

MySQL數(shù)據(jù)庫(kù)

2023-09-22 08:00:00

分布式鎖Redis
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产亚洲精品精品国产亚洲综合 | 日韩一区在线播放 | 国产精品不卡 | 国产一区二区日韩 | 日韩av最新网址 | 亚洲成av人片在线观看无码 | 亚洲国产成人av好男人在线观看 | 日韩精品一区二区三区免费视频 | aaa大片免费观看 | 亚洲h视频| 免费观看一级特黄欧美大片 | 亚洲成人日韩 | 午夜亚洲| www.日韩| 日韩一区二区三区在线观看 | 在线免费观看黄色网址 | 色婷婷久久久久swag精品 | 日韩欧美在线观看 | 一区二区三区四区在线播放 | 久久视频精品 | 超碰免费在线观看 | www.日本在线 | 日韩亚洲一区二区 | 精精国产xxxx视频在线野外 | 色爱区综合 | 欧美多人在线 | 亚洲视频一区二区三区 | 国产精品国产a级 | 夜夜草 | 欧美成ee人免费视频 | 综合久久综合久久 | 中文字幕视频网 | 亚洲精品视频一区二区三区 | 伊人国产精品 | 欧美日韩第一页 | 99re超碰| 三级在线视频 | 99久久免费精品国产免费高清 | 亚洲色欲色欲www | 日本亚洲一区 | 天天干夜夜操 |