精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

select...for update,表鎖?行鎖?間隙鎖?

開發 前端
對于范圍查詢,個人認為上面的規則還不能完全覆蓋,當時林曉斌針對這些規則,舉了 4 個示例,然后進行詳細剖析,包括間隙鎖的范圍區間計算。

大家好呀,我是樓仔。

對于這個問題,我 4 年前就專門研究過,最近看到網上很多相關的文章,要么總結得不全,要么存在很多問題。

感覺有必要自己寫一篇,一方面對網上的知識進行糾偏,另一方面也想全面總結一下這塊知識,方便大家學習。

這篇文章應該是全網總結最全的,如果有發現比我這篇寫得更好,更全,一定要私我哈。

不 BB,上文章目錄:

圖片圖片

01 環境準備

在驗證之前,我們先準備好具體的環境和數據,事務隔離級別 RR,數據庫版本 5.7.26。

為了方便測試,索引都是整型:

CREATE TABLE user (
  id int(11) unsigned NOT NULL AUTO_INCREMENT,
  user_no int(11) NOT NULL COMMENT '用戶編號',
  user_name varchar(16) DEFAULT NULL COMMENT '用戶名',
  age int(3) DEFAULT NULL COMMENT '年齡',
  PRIMARY KEY (id),
  UNIQUE KEY un_idx_user_no (user_no),
  KEY idx_age (age)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

初始化數據:

insert into user values(1, 10, '樓仔', 18);
insert into user values(4, 15, '二哥', 28);
insert into user values(8, 20, '一灰', 38);

常用命令操作:

> start transaction; // 開啟事務
> commit; // 提交事務
> rollback; // 回滾事務
> select @@transaction_isolation; // 查看事務隔離級別
> select @@version; // 查看數據庫版本
> SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; //  查詢鎖

02 場景分類

2.1 主鍵(有值)

說明:主鍵查詢,查詢數據存在。

執行悲觀鎖查詢:

select * from user where id = 1 for update;

執行更新操作,被鎖住了:

update user set user_name = "樓仔小弟" where id = 1;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

查看鎖信息:

圖片圖片

  • lock_mode 為 X(排他鎖)
  • lock_type 為 RECORD,行級鎖

結論:查詢條件為主鍵,且有值,行鎖

2.2 主鍵(空值)

操作:主鍵查詢,查詢數據不存在。

執行悲觀鎖查詢:

select * from user where id = 2 for update;

執行插入操作,被鎖住了:

insert into user values(3, 14, '樓仔小弟', 28);
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

這里的間隙鎖,鎖住的區間是 id 字段的 (1,4) 區間,查看鎖信息:

圖片圖片

  • lock_mode 為 X(排他鎖)+ Gap(間隙鎖)
  • lock_type 為 RECORD,行級鎖

結論:查詢條件為主鍵,且空值,間隙鎖

2.3 唯一索引(有值)

說明:唯一索引查詢,數據存在。

執行悲觀鎖查詢:

select * from user where user_no = 10 for update;

執行更新操作,被鎖住了:

update user set user_name = "樓仔小弟" where user_no = 10;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

圖片圖片

結論:查詢條件為唯一索引,且有值,行鎖

2.4 唯一索引(空值)

說明:唯一索引查詢,數據不存在。

執行悲觀鎖查詢:

select * from user where user_no = 11 for update;

執行插入操作,被鎖住了:

insert into user values(3, 14, '樓仔小弟', 28);
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

這里的間隙鎖,鎖住的區間是 user_no 字段的 (1,4) 區間。

圖片圖片

結論:查詢條件為唯一索引,且空值,間隙鎖

2.5 普通索引(有值)

說明:普通索引,數據存在。

執行悲觀鎖查詢:

select * from user where age = 18 for update;

執行更新操作,被鎖住了:

update user set user_name = "樓仔小弟" where age = 18;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

圖片圖片

執行插入操作,被鎖住了:

insert into user values(3, 14, '樓仔小弟', 20);
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

圖片圖片

這里鎖住的是 age 字段的 [18, 28) 這區間。

結論:查詢條件為普通索引,且有值,間隙鎖

2.6 普通索引(空值)

說明:普通索引,數據不存在。

執行悲觀鎖查詢:

select * from user where age = 19 for update;

執行插入操作,被鎖住了:

insert into user values(3, 14, '樓仔小弟', 20);
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

圖片圖片

這里鎖住的是 age 字段的 (18, 28) 這區間。

結論:查詢條件為普通索引,且空值,間隙鎖

2.7 索引(范圍查詢)

說明:這里的索引,包括主鍵索引、唯一索引和普通索引。

執行悲觀鎖查詢:

select * from user where id > 1 for update;

執行插入操作,被鎖住了:

insert into user values(3, 14, '樓仔小弟', 20);
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

圖片圖片

這里其實可以對 id = 1 的數據進行更新,對于其它數據,都被鎖住,鎖住的范圍是 id 字段的 (1, 4],(4, 8],(8, 正無窮) 區間。

結論:查詢條件為索引,且是范圍查詢,間隙鎖。

2.8 無索引

執行悲觀鎖查詢:

select * from user where user_name = "樓仔" for update;

執行插入操作,被鎖住了:

insert into user values(3, 14, '樓仔小弟', 20);
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

圖片

這里明顯是鎖表了,但是為什么鎖的信息還是行鎖呢,知道的同學,可以私我哈~~

結論:查詢條件為無索引,表鎖。

03 加鎖規則

3.1 規律總結

我們把上面的結論進行匯總:

圖片圖片

總結如下規律:

  1. 當查詢條件為主鍵和唯一索引,當有值時,是行鎖;
  2. 當查詢條件為主鍵和唯一索引,當為空值時,是間隙鎖;
  3. 當查詢條件為普通索引,是間隙鎖;
  4. 當查詢條件為索引,且為范圍查詢,是間隙鎖;
  5. 當查詢條件無索引,是表鎖。

3.2 加鎖規則

那是否有一套加鎖規則呢?

為了便于大家理解,我先普及 3 個概念:

  • Record Lock:行鎖
  • Gap Lock:間隙鎖,鎖定一個范圍,但不包含記錄本身
  • Next-Key Lock:行鎖 + 間隙鎖,左開右閉,比如(1,5]

其實 MySQL 大佬林曉斌在極客時間講過,后來也有很多博主轉發過他的加鎖規則,我直接把這套規則貼一下。

兩個“原則”:

  • 原則 1:加鎖的基本單位是 next-key lock,其中 next-key lock 是前開后閉區間;
  • 原則 2:查找過程中訪問到的對象才會加鎖。

兩個“優化”:

  • 優化 1:索引上的等值查詢,給唯一索引加鎖的時候,next-key lock退化為行鎖;
  • 優化 2:索引上的等值查詢,向右遍歷時且最后一個值不滿足等值條件的時候,next-key lock 退化為間隙鎖。

3.3 分析一下

這里我們結合上面的案例,來解讀這套加鎖規則。

針對我們前面總結的 5 條規律,我們先分析這兩條:

  • 當查詢條件為主鍵和唯一索引,當有值時,是行鎖;
  • 當查詢條件為主鍵和唯一索引,當為空值時,是間隙鎖。

下面我們根據 “兩個原則” + “兩個優化” 來分析一下。

根據 “原則 1”,加鎖的基本單位是 next-key lock,當 “索引上為等值查詢” 時(即能查到該數據),根據 “優化 1”,間隙鎖退化為行鎖。

同理,根據 “優化 2”,索引上的等值查詢,向右遍歷時且最后一個值不滿足等值條件的時候,next-key lock 退化為間隙鎖。

再分析這兩條:

  • 當查詢條件為普通索引,是間隙鎖;
  • 當查詢條件為索引,且為范圍查詢,是間隙鎖;

同上,通過 “原則 1” 和 “優化 2”,普通索引 是加的間隙鎖。

對于范圍查詢,個人認為上面的規則還不能完全覆蓋,當時林曉斌針對這些規則,舉了 4 個示例,然后進行詳細剖析,包括間隙鎖的范圍區間計算。

因為篇幅原因,這里就不再詳細展開,如果后續需要,我也可能會單獨出一篇。

04 寫在最后

最后我們再回顧一下(RR 隔離級別):

  1. 當查詢條件為主鍵和唯一索引,當有值時,是行鎖;
  2. 當查詢條件為主鍵和唯一索引,當為空值時,是間隙鎖;
  3. 當查詢條件為普通索引,是間隙鎖;
  4. 當查詢條件為索引,且為范圍查詢,是間隙鎖;
  5. 當查詢條件無索引,是表鎖。

至于間隙鎖的范圍,如何計算,本文沒有詳細闡述,但是上面的這些規則,就能基本滿足我們日常工作需要。

責任編輯:武曉燕 來源: 樓仔
相關推薦

2024-06-14 09:27:00

2023-10-25 08:21:15

悲觀鎖MySQL

2024-03-04 00:01:00

鎖表鎖行MySQL

2020-10-20 13:50:47

MySQL數據庫

2025-02-10 09:58:48

2023-01-27 20:59:19

行鎖表鎖查詢

2025-06-04 02:55:00

MySQL意向鎖記錄鎖

2025-11-10 08:41:06

2024-11-29 07:38:12

MySQL數據庫

2018-07-31 10:10:06

MySQLInnoDB死鎖

2023-12-06 07:33:20

MySQL鎖事間隙鎖

2021-12-14 08:10:00

MySQL行鎖間隙鎖

2010-05-24 12:50:59

MySQL表級鎖

2023-01-11 09:56:41

索引SQL

2022-04-29 11:39:28

MySQL幻讀Gap Lock

2022-10-24 00:33:59

MySQL全局鎖行級鎖

2022-07-20 08:06:57

MySQL表鎖Innodb

2022-10-24 08:02:14

MySQL索引類型

2020-02-06 10:02:45

MySQL數據庫全局鎖

2019-11-28 16:00:06

重入鎖讀寫鎖樂觀鎖
點贊
收藏

51CTO技術棧公眾號

久久伦理网站| 美女999久久久精品视频| 日本在线观看a| h视频网站在线观看| 国产自产v一区二区三区c| 欧美福利视频网站| 亚洲人成人无码网www国产| 亚洲综合资源| 激情久久av一区av二区av三区| 日韩欧美一区二区三区四区五区| 国产黄色一区二区| 老司机精品久久| 欧美日韩第一页| a级黄色免费视频| 国产一区二区三区亚洲| 欧美午夜电影网| 国产精品无码人妻一区二区在线| 91.xxx.高清在线| www.久久久久久久久| 国产在线视频2019最新视频| 精品美女久久久久| 一区二区免费不卡在线| 亚洲午夜国产成人av电影男同| 五月天丁香社区| 在线观看亚洲精品福利片| 欧美性xxxxx极品| 国产天堂视频在线观看| 日韩精品成人av| 久久九九影视网| 国产精品一区二区欧美黑人喷潮水| 伊人成人在线观看| 免费亚洲视频| 97**国产露脸精品国产| 久久亚洲AV无码| 亚洲精品a级片| 色综合亚洲精品激情狠狠| 无码熟妇人妻av| 黄色免费大全亚洲| 亚洲精品一区二区三区99| 一级做a爱视频| 色婷婷成人网| 欧美美女视频在线观看| 亚洲中文字幕久久精品无码喷水| 麻豆视频在线看| 亚洲一二三四区| 国产在线无码精品| 99福利在线| 亚洲男人的天堂在线aⅴ视频| 日韩欧美激情一区二区| 九色网友自拍视频手机在线| 国产午夜精品久久久久久久| 久久久综合亚洲91久久98| 神马久久久久| 91色乱码一区二区三区| 精品国产免费久久久久久尖叫 | 欧美爱爱免费视频| 久久精品国产www456c0m| 国产午夜精品一区理论片飘花| 中日韩精品一区二区三区| 偷拍一区二区| 亚洲深夜福利视频| 天堂av网手机版| 99精品综合| 欧美成人国产va精品日本一级| 免费一级片在线观看| 亚洲国产精品一区| 91精品国产91久久久久久| 九九热精品视频在线| 国产精品亚洲综合久久| 国产成人精品免高潮在线观看| 天堂网免费视频| 麻豆精品久久久| 亚洲综合成人婷婷小说| 亚洲AV无码乱码国产精品牛牛| 成人精品一区二区三区中文字幕| 精品乱色一区二区中文字幕| 美女做暖暖视频免费在线观看全部网址91 | 黄色在线免费播放| 美女毛片一区二区三区四区| 一个人www欧美| 乱老熟女一区二区三区| 一区二区蜜桃| 热99精品里视频精品| 蜜臀99久久精品久久久久小说| 麻豆一区二区三| 99一区二区| 日本在线视频1区| 国产精品色哟哟| 日韩国产成人无码av毛片| 激情国产在线| 欧美视频一区在线| 色哟哟视频在线| 国产剧情在线观看一区| 久久精品国亚洲| 日本视频免费在线| 美腿丝袜亚洲色图| 国产乱码精品一区二区三区中文| 久久天堂电影| 亚洲一区国产视频| 亚洲高清在线免费观看| 91成人在线精品视频| 亚洲偷熟乱区亚洲香蕉av| 青青草激情视频| 亚洲在线国产日韩欧美| 91亚洲精品久久久| 户外极限露出调教在线视频| 亚洲免费观看在线观看| 青青青在线视频免费观看| av综合网址| 中文字幕日韩综合av| 成人免费看片98欧美| 国产在线不卡视频| 日韩国产欧美精品| av中文字幕在线看| 欧美剧在线免费观看网站| 一出一进一爽一粗一大视频| 欧美激情91| 国产中文字幕日韩| 黄色在线播放| 精品毛片三在线观看| 亚欧精品在线视频| 成人系列视频| 国产高清在线不卡| 五月天久久久久久| 一区二区三区四区国产精品| 91在线视频观看免费| 欧美中文一区| 欧美激情一二三| 国产乱淫片视频| 中文字幕一区二区三区乱码在线| 人妻内射一区二区在线视频 | 亚洲欧洲高清| 亚洲国产精品va在线看黑人动漫| 九九在线观看视频| 国产乱码精品一区二区三| 黄色小网站在线观看| 夜间精品视频| 国产美女精品视频| 日韩高清在线播放| 欧美巨大xxxx做受沙滩| 欧美日韩另类一区| 亚洲欧美va天堂人熟伦| 国产精品久久久久久模特| 国产在线欧美日韩| 9765激情中文在线| 精品福利一二区| 国产乱国产乱老熟300| 毛片av一区二区三区| 午夜精品电影在线观看| 黄色成人免费网| 亚洲男人第一网站| 日本免费在线观看视频| 国产亚洲美州欧州综合国| 丰满人妻中伦妇伦精品app| 日韩欧美中文字幕电影| 日本一区二区在线播放| 国产私拍精品| 欧美午夜寂寞影院| 永久免费看mv网站入口| 国产一区二区调教| 国产精品啪啪啪视频| 欧美在线在线| 性日韩欧美在线视频| 水莓100在线视频| 一本大道久久a久久综合婷婷 | 成人午夜伦理影院| 国产h视频在线播放| 国产欧美日韩精品一区二区免费 | 久久人人爽爽爽人久久久| 成人在线观看a| 成人6969www免费视频| 成人免费在线视频网址| 午夜小视频福利在线观看| 亚洲精品一区二区三区四区高清 | 精品极品在线| 亚洲香蕉伊综合在人在线视看 | 国精产品一区一区三区mba视频| 超薄肉色丝袜足j调教99| 风间由美性色一区二区三区四区 | 日韩中文字幕在线| 亚洲第九十九页| 粉嫩老牛aⅴ一区二区三区| 日本少妇xxxxx| 国产91综合网| 成人在线观看黄| 中文精品久久| 欧美理论一区二区| 韩国三级大全久久网站| 日本a级片电影一区二区| 黄视频在线观看网站| 亚洲第一级黄色片| 一级黄色片在线播放| 亚洲成人一区二区在线观看| 国产一二三四区在线| 国产成人在线色| 999香蕉视频| 国产一区美女| 色999五月色| 高潮久久久久久久久久久久久久 | 国产免费观看久久黄| 春暖花开成人亚洲区| 欧美一级二级三级蜜桃| 久久久久久久久久影院| 国产精品的网站| 朝桐光av一区二区三区| 精品在线观看视频| www一区二区www免费| 66视频精品| 欧美日韩大片一区二区三区| 日韩精品中文字幕吗一区二区| 日韩美女视频中文字幕| 国产探花在线观看| 最近中文字幕2019免费| 天堂v视频永久在线播放| 日韩一区二区中文字幕| 做爰无遮挡三级| 婷婷综合五月天| 欧美成人三级视频| 国产精品视频观看| 最新中文字幕视频| 国产精品1区二区.| www.激情小说.com| 久久xxxx| 欧美日韩成人免费视频| 午夜国产精品视频| 手机在线视频你懂的| 欧美日韩高清| 欧美国产综合视频| 精品国内亚洲2022精品成人| 97久久人人超碰caoprom欧美| 日韩成人免费av| 国产精品久久不能| 超碰国产一区| 欧美专区在线播放| 蜜桃视频m3u8在线观看| 亚洲2020天天堂在线观看| 宅男网站在线免费观看| 久久久久999| 日本在线免费看| 中文综合在线观看| 国产在线观看黄| 亚洲一区二区福利| 国产福利在线视频| 一本色道久久综合狠狠躁篇怎么玩| 日本a一级在线免费播放| 亚洲精品99久久久久中文字幕| 亚洲精品国产精品国| 日韩欧美精品三级| 亚洲国产精品视频在线| 精品国产乱子伦一区| 黄色aaa大片| 精品国产电影一区二区| 亚洲精品第五页| 亚洲国产成人精品久久久国产成人一区| 99久久精品国产色欲| 欧美一级日韩免费不卡| 国产精品人人妻人人爽| 欧美一区二区三区四区高清| 午夜精品久久久久久久99老熟妇| 日韩欧美不卡一区| 老熟妇高潮一区二区高清视频| 亚洲大尺度美女在线| 天堂中文在线8| 在线亚洲男人天堂| www免费视频观看在线| 欧美激情在线观看视频| heyzo高清在线| 日本精品视频在线观看| 欧美123区| 91久久久国产精品| av在线亚洲色图| 日本在线高清视频一区| 久久一区二区三区电影| 免费的一级黄色片| 国产精品婷婷| 999在线观看| 国产成人99久久亚洲综合精品| 亚洲熟女一区二区| 久久精品无码一区二区三区| 女性裸体视频网站| 亚洲综合一区二区三区| 黄色av一级片| 91精品国产综合久久久蜜臀图片| 蜜臀av在线观看| 国产亚洲精品美女| 日日夜夜天天综合入口| 奇米4444一区二区三区| 电影91久久久| 久久99久久99精品蜜柚传媒| 久久精品不卡| 国产免费黄视频| 激情综合网天天干| 精品国产av色一区二区深夜久久| 欧美激情一区三区| 国产一级一片免费播放放a| 在线视频你懂得一区| www.色日本| 中文字幕亚洲第一| 久草在线中文最新视频| 91精品中文在线| 国产精品片aa在线观看| 久久久国内精品| 免费在线观看精品| 朝桐光av一区二区三区| 亚洲欧美日韩国产另类专区 | 草莓福利社区在线| 日本中文字幕成人| 国产精品毛片视频| 中文字幕一区二区三区四区五区| 国产精品一国产精品k频道56| 中文字幕55页| 欧美国产激情二区三区 | 亚洲理伦在线| 亚洲国产日韩在线一区| 国产农村妇女毛片精品久久麻豆| 日韩激情一区二区三区| 678五月天丁香亚洲综合网| 久久久资源网| 国内精品视频在线| 精品一区二区三区中文字幕在线 | 日本黄色免费观看| 亚洲精品高清在线观看| 亚洲视频在线免费播放| 亚洲欧洲在线观看| 午夜欧美激情| 国产欧美亚洲日本| 欧美午夜一区二区福利视频| 在线观看岛国av| 日本一区二区成人在线| 国产suv精品一区二区33| 亚洲国语精品自产拍在线观看| 综合久久2o19| 亚洲综合在线小说| 91成人免费| 男女污污视频网站| 中文字幕中文字幕一区二区| 中文永久免费观看| 亚洲一区二区黄| 69堂免费精品视频在线播放| 欧美日韩在线观看一区| 亚洲女同在线| 中文字幕一区二区人妻在线不卡| 五月天久久比比资源色| 特黄视频在线观看| 韩国三级电影久久久久久| 狠狠一区二区三区| 毛片在线视频播放| 26uuu精品一区二区三区四区在线| 免费观看成人毛片| 亚洲免费视频观看| 日本欧美韩国| dy888午夜| 国产精品1区2区3区在线观看| 国产小视频在线观看免费| 亚洲成av人乱码色午夜| 精品丝袜在线| 日本在线成人一区二区| 精品亚洲porn| 妺妺窝人体色www婷婷| 亚洲国产欧美久久| 成人自拍av| 精品少妇人妻av一区二区| 国产精品69毛片高清亚洲| 国产精品99精品无码视| 亚洲日韩欧美视频| 欧洲亚洲精品| 福利视频免费在线观看| 久久久蜜桃精品| 一区二区三区午夜| 欧美国产日本高清在线 | 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 日韩欧美影院| 伊人成人222| 亚洲高清免费在线| 免费国产在线视频| 91在线免费观看网站| 激情婷婷亚洲| 在线小视频你懂的| 欧美一区二区视频在线观看2020| а√天堂8资源在线| 亚洲精品美女久久7777777| 国产成人在线网站| 男人天堂视频在线| 九九久久久久99精品| 亚洲人成伊人成综合图片| 欧美又黄又嫩大片a级| 欧美日韩免费看| 久久bbxx| 免费成人av网站| 国产精品一区二区黑丝| 亚洲欧美偷拍一区| 欧美成在线视频| 国产成人三级| 图片区偷拍区小说区| 在线免费观看日韩欧美| 先锋影音在线资源站91| 亚洲黄色一区二区三区| 成人国产免费视频| 国产乱人乱偷精品视频a人人澡| 4k岛国日韩精品**专区|