日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL笔记-InnoDB中Record Lock与Gap Lock

發布時間:2025/3/15 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL笔记-InnoDB中Record Lock与Gap Lock 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鎖:用于在多個事務訪問同一個對象時根據這些操作訪問同一對象的先后次序給事務排序。

?

不同數據庫的鎖實現:

InnoDB:行級鎖;

Oracle:行級鎖;

MyISAM:表級鎖;

Microsoft SQL Service:行級鎖、鎖升級

?

InnoDB存儲引擎中的鎖:

表級鎖:

IS(意向共享鎖):事務給行加共享鎖時會先取得該表的IS鎖;

IX(意向排他鎖):事務給行加排他鎖時必須取得該表的IX鎖;

行級鎖:

S(行級共享鎖):允許一個事務去讀一行,阻止其他事務獲得相同數據的排他鎖;

X(行級排他鎖):允許獲取排他鎖的事務更新數據,阻止其他事務獲取相同數據的共享鎖和排他鎖;

?

比如如下這條語句:

update t1 set name = 'aaaaa' where id = 1;

這里先回給表t1添加IX鎖,然后再給id=1的行添加X鎖。

下面給出兼容性表格:

這里為什么要用2個鎖:因為在高并發下,如果有事務去刪這個表,就會去查有沒有這2個鎖,先找表鎖,再找行鎖。這樣的話效率就高得多。

?

下面是InnoDB行鎖的介紹:

Record Lock:行記錄鎖;

Gap Lock:間隙鎖,在索引記錄間隙上的鎖,在第一條索引記錄之前,最后一條索引記錄之后上的間隙鎖;

Next-key lock:下鍵鎖,上面2個鎖的組合鎖;

?

比如下面這個表:

create table t2(id int, name varchar(10),primary key(id),key(name));insert into t2 values(1, 'A'), (3, 'A'), (5, 'C'), (7, 'G'), (10, 'I'); select id, name from t2;

這里有一點要注意:只有可重復讀的事務等級才會有Gap lock鎖。對應普通索引和普通列。基本上只針對普通索引。在空隙間加鎖,解決幻讀。因為不能插入數據。

?

在事務中常常用到的2組關鍵字:

for update:可以為數據庫中的行上一個排它鎖。當一個事務的操作未完成時候,其他事務可以讀取但是不能寫入或更新。

lock in share mode:共享鎖,允許其他線程讀,但不能進行修改。

?

下面做一個關于Record Lock的例子:

當session 1 進行:

begin; select * from t2 where name = 'C' for update;

session 2會被阻塞嗎?

begin; select * from t2 where id = 5 lock in share mode;

for update為id為5的行加了排他鎖,導致在session2查的時候,阻塞。

但是mysql有套超時解鎖機制:

當超時會把自動釋放事務。

?

下面是第二個關于Record Lock的測試:

先來看下t2的所有數據:

select * from t2;

session1:

begin; select * from t2 where id = 5 and name = 'C' for update;

session2:

begin; select * from t2 where id = 5 and name = 'B' for update;

從中可以看到,也是被阻塞的。

?

這里可以通過這條命令查詢下哪個事務用了什么鎖:

在mysql中InnoDB中的鎖會被記錄到innodb_locks這個表中:

select * from information_schema.innodb_locks;

普通索引上的鎖,都要追溯到主鍵上。mysql是聚蔟索引表。最終會關聯到主鍵上。

?

?

下面是關于Gap Lock的測試

理論我們都知道了,加了Gap Lock,解決幻讀,是不能插入其他數據的,在此還是演示下:

session1:

begin; select * from t2 where name = 'C' for update

session2:

begin; insert into t2 values(4, 'C');

查看其阻塞的情況。

這里要知道的一點:Gap lock在InnoDB中存在的條件是事務等級為可重復讀,先查下事務等級:

show variables like '%iso%'

演示如下:

從中可以看到session2被阻塞了,看下鎖:

也就是為什么MySQL中可重復讀,可以解決幻讀問題,但是這種默認設計在理論上來說,并發量沒有oracle高。但好處也是很多的。

總結

以上是生活随笔為你收集整理的MySQL笔记-InnoDB中Record Lock与Gap Lock的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: wwwxxx色 | 少妇被爽到高潮动态图 | 国产成人综合视频 | 国产精品1000部啪视频 | 欧美黄色a级 | 日本一区免费电影 | gogo人体做爰大胆视频 | 午夜视频免费看 | 亚洲成a人片77777精品 | 神马三级我不卡 | av自拍偷拍| 亚洲欧美高清 | 影音先锋中文字幕一区 | 天天射夜夜骑 | 日韩av在线免费观看 | 91麻豆精品91久久久久同性 | 日本乱偷人妻中文字幕在线 | 亚洲美女视频网站 | 黄色网址在线视频 | 精品777 | 国产强被迫伦姧在线观看无码 | 女人18毛片水真多 | 韩国jizz| 逼逼av网站 | 国产午夜免费福利 | 成熟丰满熟妇高潮xxxxx视频 | 国产天堂 | 最新日韩精品 | 91成人在线观看高潮 | 变态 另类 国产 亚洲 | 欧美一级淫片免费视频魅影视频 | 成人a站 | 日韩成人一区二区 | 黄色片网站在线免费观看 | 黄色777| 91精品一区二区三区综合在线爱 | 精品一区二区三区在线观看视频 | 欧美成人激情视频 | 色香蕉av | av毛片在线免费观看 | 亚洲无码精品在线播放 | 亚洲蜜臀av | 9色视频在线观看 | 国产91啪| 亚洲精品乱码久久久久久蜜桃不卡 | free黑人多人性派对hd | 欧美色图一区 | 在线涩涩 | 国产露脸国语对白在线 | 日本少妇高潮抽搐 | 日本一本久草 | 欧美性做爰毛片 | 日韩中文在线字幕 | 欧美人妖老妇 | 91理论片午午伦夜理片久久 | 日韩视频免费观看 | 欧美一区二区三区大屁股撅起来 | 69av在线视频 | 日本第一页 | 亚洲一区二区三区四区在线 | 亚洲天堂久久久久 | 免费av国产 | 偷拍一区二区 | 欧美在线视频一区二区 | 亚洲福利电影 | 奇米影视网 | 福利影院在线 | 91在线免费播放 | 国产91专区 | 色综合久久久久久 | 人人干超碰 | 国产精品成人国产乱一区 | 久久久久亚洲av无码专区首jn | 另类天堂 | av伦理在线| 懂色av蜜臂av粉嫩av | 夫妻啪啪呻吟x一88av | 东京热无码av一区二区 | www.色黄| 亚洲色图小说 | 欧洲一区二区三区 | 五月婷婷在线视频 | 7799精品视频天天看 | 国产成人免费观看视频 | 性久久久久久 | 逼逼av| 免费在线视频你懂的 | 国产又黄又嫩又滑又白 | 操人小视频| 橹图极品美女无圣光 | 日本中文字幕在线观看视频 | 久久久久亚洲色欲AV无码网站 | 娇小萝被两个黑人用半米长 | 亚洲AV无码精品一区二区三区 | 国产视频一区二区在线 | 伊人av网站| 成年人免费网 | 久久精品99国产精品日本 | 5566在线|