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

美團面試特有:寫個 SQL 語句然后問加了哪些鎖

數據庫 其他數據庫
范圍查詢和等值查詢的區別在上面唯一索引章節已經介紹過了,就是范圍查詢需要一直向右遍歷到第一個不滿足條件的記錄,和唯一索引范圍查詢不同的是,非唯一索引的范圍查詢并不會退化成 Record Lock 或者 Gap Lock。

美團問數據庫應該是非常多的,尤其喜歡考手寫 SQL 然后問你這個 SQL 語句上面加了哪些鎖,你會發現其他廠面試基本很少會這樣考,所以很多小伙伴遇到這種問題的時候都是一臉懵逼,這篇文章就來詳細總結下 InnoDB 存儲引擎中的行鎖的加鎖規則,并輔以實例解釋。

首先眾所周知,InnoDB 三種行鎖:

  • Record Lock(記錄鎖):鎖住某一行記錄
  • Gap Lock(間隙鎖):鎖住一段左開右開的區間
  • Next-key Lock(臨鍵鎖):鎖住一段左開右閉的區間

哪些語句上面會加行鎖?

1)對于常見的 DML 語句(如 UPDATE、DELETE? 和 INSERT ),InnoDB 會自動給相應的記錄行加寫鎖

2)默認情況下對于普通 SELECT 語句,InnoDB 不會加任何鎖,但是在 Serializable 隔離級別下會加行級讀鎖

上面兩種是隱式鎖定,InnoDB 也支持通過特定的語句進行顯式鎖定:

3)SELECT * FROM table_name WHERE ... FOR UPDATE,加行級寫鎖

4)SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE,加行級讀鎖

前置知識就不過多介紹了,在學習具體行鎖加鎖規則之前,小伙伴們需要記住加鎖規則的兩條核心:

1)查找過程中訪問到的對象才會加鎖

這句話該怎么理解?比如有主鍵 id 為 1 2 3 4 5 ... 10? 的10 條記錄,我們要找到 id = 7? 的記錄。注意,查找并不是從第一行開始一行一行地進行遍歷,而是根據 B+ 樹的特性進行二分查找,所以一般存儲引擎只會訪問到要找的記錄行(id = 7)的相鄰區間

2)加鎖的基本單位是 Next-key Lock

下面結合實例幫助大伙分析一條 SQL 語句上面究竟被 InnoDB 自動加上了多少個鎖

假設有這么一張 user? 表,id? 為主鍵(唯一索引),a? 是普通索引(非唯一索引),b 都是普通的列,其上沒有任何索引:

id (唯一索引)

a (非唯一索引)

b

10

4

Alice

15

8

Bob

20

16

Cilly

25

32

Druid

30

64

Erik

案例 1:唯一索引等值查詢

當我們用唯一索引進行等值查詢的時候,根據查詢的記錄是否存在,加鎖的規則會有所不同:

  1. 當查詢的記錄是存在的,Next-key Lock 會退化成記錄鎖
  2. 當查詢的記錄是不存在的,Next-key Lock 會退化成間隙鎖

查詢的記錄存在

先來看個查詢的記錄存在的案例:

select * from user
where id = 25
for update;

結合加鎖的兩條核心:查找過程中訪問到的對象才會加鎖 + 加鎖的基本單位是 Next-key Lock(左開右閉),我們可以分析出,這條語句的加鎖范圍是 (20, 25]

不過,由于這個唯一索引等值查詢的記錄 id = 25? 是存在的,因此,Next-key Lock 會退化成記錄鎖,因此最終的加鎖范圍是 id = 25 這一行

查詢的記錄不存在

再來看查詢的記錄不存在的案例:

select * from user
where id = 22
for update;

結合加鎖的兩條核心:查找過程中訪問到的對象才會加鎖 + 加鎖的基本單位是 Next-key Lock(左開右閉),我們可以分析出,這條語句的加鎖范圍是 (20, 25]

這里為什么是 (20,25]? 而不是 (20, 22]?,因為 id = 22 的記錄不存在呀,InnoDB 先找到 id = 20 的記錄,發現不匹配,于是繼續往下找,發現 id = 25,因此,id = 25 的這一行被掃描到了,所以整體的加鎖范圍是 (20, 25]

由于這個唯一索引等值查詢的記錄 id = 22? 是不存在的,因此,Next-key Lock 會退化成間隙鎖,因此最終在主鍵 id 上的加鎖范圍是 Gap Lock (20, 25)

案例 2:唯一索引范圍查詢

唯一索引范圍查詢的規則和等值查詢的規則一樣,只有一個區別,就是唯一索引的范圍查詢需要一直向右遍歷到第一個不滿足條件的記錄,下面結合案例來分析:

select * from user
where id >= 20 and id < 22
for update;

先來看語句查詢條件的前半部分 id >= 20?,因此,這條語句最開始要找的第一行是 id = 20,結合加鎖的兩個核心,需要加上 Next-key Lock (15,20]?。又由于 id 是唯一索引,且 id = 20 的這行記錄是存在的,因此會退化成記錄鎖,也就是只會對 id = 20 這一行加鎖。

再來看語句查詢條件的后半部分 id < 22?,由于是范圍查找,就會繼續往后找第一個不滿足條件的記錄,也就是會找到 id = 25? 這一行停下來,然后加 Next-key Lock (20, 25]?,重點來了,但由于 id = 25? 不滿足 id < 22?,因此會退化成間隙鎖,加鎖范圍變為 (20, 25)。

所以,上述語句在主鍵 id 上的最終的加鎖范圍是 Record Lock id = 20? 以及  Gap Lock (20, 25)

案例 3:非唯一索引等值查詢

當我們用非唯一索引進行等值查詢的時候,根據查詢的記錄是否存在,加鎖的規則會有所不同:

  • 當查詢的記錄是存在的,除了會加 Next-key Lock 外,還會額外加間隙鎖(規則是向下遍歷到第一個不符合條件的值才能停止),也就是會加兩把鎖

很好記憶,就是要查找記錄的左區間加 Next-key Lock,右區間加 Gap lock

  • 當查詢的記錄是不存在的,Next-key Lock 會退化成間隙鎖(這個規則和唯一索引的等值查詢是一樣的)

查詢的記錄存在

先來看個查詢的記錄存在的案例:

select * from user
where a = 16
for update;

結合加鎖的兩條核心,這條語句首先會對普通索引 a 加上 Next-key Lock,范圍是 (8,16]

又因為是非唯一索引等值查詢,且查詢的記錄 a= 16? 是存在的,所以還會加上間隙鎖,規則是向下遍歷到第一個不符合條件的值才能停止,因此間隙鎖的范圍是 (16,32)

所以,上述語句在普通索引 a 上的最終加鎖范圍是 Next-key Lock (8,16]? 以及  Gap Lock (16,32)

查詢的記錄不存在

再來看查詢的記錄不存在的案例:

select * from user
where a = 18
for update;

結合加鎖的兩條核心,這條語句首先會對普通索引 a 加上 Next-key Lock,范圍是 (16,32]

但是由于查詢的記錄 a = 18? 是不存在的,因此 Next-key Lock 會退化為間隙鎖,即最終在普通索引 a 上的加鎖范圍是 (16,32)。

案例 4:非唯一索引范圍查詢

范圍查詢和等值查詢的區別在上面唯一索引章節已經介紹過了,就是范圍查詢需要一直向右遍歷到第一個不滿足條件的記錄,和唯一索引范圍查詢不同的是,非唯一索引的范圍查詢并不會退化成 Record Lock 或者 Gap Lock。

select * from user
where a >= 16 and a < 18
for update;

先來看語句查詢條件的前半部分 a >= 16?,因此,這條語句最開始要找的第一行是 a = 16,結合加鎖的兩個核心,需要加上 Next-key Lock (8,16]?。雖然非唯一索引 a = 16 的這行記錄是存在的,但此時并不會像唯一索引那樣退化成記錄鎖。

再來看語句查詢條件的后半部分 a < 18?,由于是范圍查找,就會繼續往后找第一個不滿足條件的記錄,也就是會找到 id = 32? 這一行停下來,然后加 Next-key Lock (16, 32]?。雖然 id = 32? 不滿足 id < 18,但此時并不會向唯一索引那樣退化成間隙鎖。

所以,上述語句在普通索引 a 上的最終的加鎖范圍是 Next-key Lock (8, 16]? 和  (16, 32]?,也就是 (8, 32]。

責任編輯:武曉燕 來源: 飛天小牛肉
相關推薦

2023-03-28 21:33:53

面試隔離MVCC

2018-04-23 09:50:54

2023-06-30 07:58:07

Spring數據源事務

2021-08-29 18:36:17

MySQL技術面試題

2021-08-26 13:22:09

JVM調優參數

2024-05-16 17:58:30

線程任務線程通訊線程池

2023-05-22 08:17:04

2022-01-21 10:51:39

MySQL索引

2018-06-01 10:08:00

DBA美團SQL

2024-06-07 08:10:14

Netty操作系統零拷貝

2021-12-16 18:38:13

面試Synchronize

2016-11-27 20:43:26

云計算迭代

2013-08-20 13:11:58

技術美團

2020-12-30 10:04:46

userMapper接口

2018-07-17 14:25:02

SQL解析美團點評MySQL

2025-04-23 08:10:00

2017-06-01 10:52:35

互聯網

2022-03-03 16:45:02

美團述職反饋

2023-11-26 17:48:00

營銷策略

2021-08-31 15:19:16

美團面試快排
點贊
收藏

51CTO技術棧公眾號

国产欧美精品国产国产专区| 欧美永久精品| 欧美在线三级电影| 色香蕉在线观看| 欧美一区二区三区成人片在线| 亚洲免费综合| 中文字幕精品—区二区四季| 国产美女久久久| 久久久久久欧美精品se一二三四| 欧洲亚洲视频| 欧美福利视频一区| 久久精品日产第一区二区三区| 亚洲大片免费观看| 亚洲成人精品| 日韩国产在线播放| 一区二区三区国产好的精华液| 女人高潮被爽到呻吟在线观看| 国产精品久久午夜| 精品国产乱码久久久久久蜜柚| 懂色av蜜臀av粉嫩av喷吹| 国自产拍偷拍福利精品免费一| 亚洲偷熟乱区亚洲香蕉av| 欧美老女人bb| 国产成人免费精品| 精品久久久一区二区| 警花观音坐莲激情销魂小说| 国产精品天堂| 成人午夜激情在线| 成人免费福利在线| 波多野结衣爱爱| 亚洲久久在线| 欧美交受高潮1| 丝袜美腿小色网| 久久视频国产| 国产亚洲人成a一在线v站| 成人在线视频免费播放| 精品视频在线观看网站| 欧美性色欧美a在线播放| 免费毛片小视频| 牛牛在线精品视频| 亚洲男帅同性gay1069| 亚洲三区在线| 国产黄色在线| 国产日韩欧美高清在线| 久久久久高清| 少妇又色又爽又黄的视频| 国产成人在线视频网站| 成人天堂噜噜噜| 亚洲综合网av| 老司机精品视频在线| 国产精品久久久久999| 影音先锋男人看片资源| 亚瑟国产精品| 精品视频1区2区3区| 午夜免费一区二区| free欧美| 欧美性大战久久久久久久| 能在线观看的av网站| 中文av在线全新| 一本色道亚洲精品aⅴ| 欧美成人免费在线观看视频| 超碰在线97国产| 亚洲国产乱码最新视频| www.日本在线播放| 亚洲免费福利| 色噜噜狠狠成人网p站| 九九九在线观看视频| 不卡亚洲精品| 7799精品视频| 中文字幕18页| 羞羞色国产精品网站| 亚洲天堂网站在线观看视频| 97人妻人人揉人人躁人人| 91麻豆精品国产91久久久平台| 久久精品男人天堂| 激情五月婷婷在线| 香蕉久久久久久久av网站| 国产精品精品久久久| ,一级淫片a看免费| 福利一区二区在线| 麻豆传媒一区二区| 免费a级人成a大片在线观看| 夜色激情一区二区| 免费av网址在线| 欧美视频在线视频精品| 欧美v亚洲v综合ⅴ国产v| 三叶草欧洲码在线| 第一会所sis001亚洲| 精品中文字幕乱| 超碰中文字幕在线| 激情综合网最新| 国产美女在线精品免费观看| 久久国产精品高清一区二区三区| 亚洲欧美在线视频观看| 国产av国片精品| 成人久久网站| 精品sm捆绑视频| 日韩免费成人av| 亚洲小说区图片区| 国产精品情侣自拍| 日本激情一区二区| 国产精品久久久久久妇女6080| 黄色一级大片免费| 亚洲综合在线电影| 欧美成人三级电影在线| 亚洲成人黄色av| 精品二区久久| 国产欧美精品久久久| 无码国产伦一区二区三区视频| 欧美国产一区二区| 狠狠干 狠狠操| 国产亚洲高清一区| 伊人久久久久久久久久| xxxx 国产| 国产一区二区按摩在线观看| 欧洲精品在线一区| 蜜臀av国内免费精品久久久夜夜| 欧美天堂亚洲电影院在线播放| 欧美夫妇交换xxx| 性欧美欧美巨大69| 国产精品久久一区| 日韩专区一区二区| 亚洲国产日韩a在线播放性色| 中日韩av在线播放| 成人aaaa| 国产成人av网| 你懂得在线网址| 精品久久久久久久中文字幕| 亚洲少妇一区二区| 91精品国产视频| 国产精品视频免费观看www| av女名字大全列表| 同产精品九九九| youjizz.com日本| 女主播福利一区| 91美女片黄在线观| 欧美三级电影一区二区三区| 欧美在线视频日韩| 亚洲黄色免费视频| 日日夜夜免费精品| 日韩av电影免费播放| 欧美gv在线| 日韩电影在线观看永久视频免费网站| 久久婷婷一区二区| 国产91精品一区二区麻豆网站 | 久久精品网站视频| 亚洲丁香日韩| 日韩av手机在线观看| 欧美拍拍视频| 日韩欧美中文第一页| 爱爱的免费视频| 婷婷精品在线观看| 97国产成人精品视频| 日本黄色不卡视频| 精品久久久久久久久久久久久 | 清纯唯美亚洲经典中文字幕| 亚洲91精品在线观看| 日本波多野结衣在线| 午夜精品福利久久久| 日韩aaaaa| 美女日韩在线中文字幕| 神马影院午夜我不卡| 国产综合色激情| www.亚洲一区| 丰满肉嫩西川结衣av| 性做久久久久久免费观看欧美| 中文在线观看免费视频| 在线亚洲国产精品网站| 秋霞在线观看一区二区三区| 福利一区二区| 欧美乱妇40p| 天堂在线资源8| 色8久久精品久久久久久蜜 | 精品国产一区二区三区av片| 国产精品免费福利| 中文av资源在线| 日韩国产欧美区| 亚洲综合精品在线| 一区二区成人在线观看| 一级做a爰片毛片| 日本免费新一区视频| 91视频免费网站| wwww亚洲| 在线日韩av观看| 国内精品偷拍视频| 日韩欧美国产黄色| 中文字幕在线有码| 久久综合色综合88| caoporm在线视频| 一区二区三区国产盗摄| 亚洲日本理论电影| 精品福利一区| 国产日韩在线免费| av伦理在线| 中文字幕在线成人| 蜜桃视频在线观看www| 欧美日韩免费视频| 日韩欧美一区二区一幕| 国产精品免费av| 私密视频在线观看| 黑人精品欧美一区二区蜜桃| 欧美亚洲精品一区二区| 亚洲综合五月| 神马影院一区二区| 国产精品网在线观看| 国产美女久久久| 国模套图日韩精品一区二区| 欧美乱妇高清无乱码| 亚洲精品传媒| 亚洲裸体xxxx| 亚洲精品综合久久| 欧美日韩国产综合一区二区三区| 国产污视频在线观看| 国产精品成人免费在线| 亚洲专区区免费| 成人免费福利片| 天堂av在线8| 日本va欧美va精品发布| 2018日日夜夜| 亚洲夜间福利| 97在线免费视频观看| 日韩欧美字幕| 三级三级久久三级久久18| 欧美丝袜美腿| 国产精品国产精品国产专区蜜臀ah| 日韩护士脚交太爽了| 国产福利精品av综合导导航| 亚洲福利影院| 97人人爽人人喊人人模波多| 国产啊啊啊视频在线观看| 久久亚洲欧美日韩精品专区| 日本中文字幕在线视频| 国产性色av一区二区| 国内在线免费高清视频| 精品网站999www| 亚欧在线观看视频| 亚洲国产成人在线播放| 丰满少妇一级片| 精品免费视频一区二区| 男人午夜视频在线观看| 午夜一级久久| 37pao成人国产永久免费视频| 亚洲精品男同| 日韩小视频网站| 尤物网精品视频| 久久av综合网| 一区视频在线| 中国丰满人妻videoshd| 国产亚洲精品久久久久婷婷瑜伽| av在线播放亚洲| 中文高清一区| 免费无码国产v片在线观看| 亚洲少妇一区| av免费网站观看| 日本色综合中文字幕| 特级丰满少妇一级| 精品一区精品二区高清| 日本特黄在线观看| 成人在线一区二区三区| 成熟妇人a片免费看网站| 97久久人人超碰| 国产激情在线免费观看| 欧美激情综合五月色丁香小说| 免费黄色激情视频| 亚洲欧美日韩在线| 久久这里只有精品国产| 精品日韩美女的视频高清| 免费视频久久久| 欧美男男青年gay1069videost| 91女人18毛片水多国产| 欧美videos中文字幕| 婷婷五月综合久久中文字幕| 亚洲欧美中文在线视频| 午夜激情视频在线| 欧美另类在线观看| 日韩av影片| 91精品国产综合久久久久久久久| 日本高清久久| 欧美lavv| 在线观看免费一区二区| 一区二区传媒有限公司| 青青草国产精品97视觉盛宴 | 成人精品一区二区三区电影| 97人人模人人爽人人喊38tv| 日日狠狠久久偷偷综合色| 在线不卡日本| 一区二区国产精品| 亚洲成人天堂网| 9色porny自拍视频一区二区| 手机看片国产日韩| 亚洲国产欧美在线| 伊人精品在线视频| 精品福利视频一区二区三区| 国产区av在线| 久久久久久有精品国产| 欧美日韩激情电影| 国产精品v欧美精品v日韩| 成人一二三区| 黄色动漫在线免费看| 国产精品一区二区在线看| 中文字幕被公侵犯的漂亮人妻| 亚洲精品少妇30p| 国产第一页在线观看| 精品国产乱码久久久久久老虎| 国产二区在线播放| 性亚洲最疯狂xxxx高清| 24小时成人在线视频| 欧美日韩亚洲一区二区三区在线观看| 中文字幕一区二区三区久久网站| 久章草在线视频| 成人免费高清在线| 精品国产视频一区二区三区| 色老头久久综合| 午夜激情在线视频| 欧美国产日韩一区二区三区| 国产精品久久久久久久久免费高清 | 国产精品对白久久久久粗| 亚洲一区二区高清视频| 视频一区视频二区中文| 成人免费av片| 红桃av永久久久| 亚洲免费不卡视频| 久热精品视频在线观看| yy6080久久伦理一区二区| 日本不卡在线播放| 亚洲免费中文| 播金莲一级淫片aaaaaaa| 亚洲国产综合在线| 亚洲国产www| 欧美成人高清视频| 国产美女精品视频免费播放软件| 亚洲一区二区三区欧美| 日韩av一级电影| 亚洲最大成人综合网| 色噜噜偷拍精品综合在线| 三级黄视频在线观看| 欧美孕妇与黑人孕交| 人人精品视频| 哪个网站能看毛片| 97se亚洲国产综合自在线| 国产污视频在线看| 亚洲精品国偷自产在线99热| av资源在线播放| 精品国产免费人成电影在线观...| 影音先锋亚洲电影| 亚洲色偷偷色噜噜狠狠99网| 亚洲成人午夜影院| 午夜视频免费看| 欧美专区中文字幕| 精品国产91久久久久久浪潮蜜月| 成人免费毛片播放| 国产欧美一区二区精品性| 这里只有精品国产| 色噜噜狠狠狠综合曰曰曰| 日本一区二区中文字幕| 黄频视频在线观看| 国产精品乡下勾搭老头1| 国产精品6666| 亚洲女人天堂成人av在线| 高清亚洲高清| 蜜臀av.com| av电影天堂一区二区在线| 亚洲va在线观看| www日韩欧美| 亚洲开心激情| 99蜜桃臀久久久欧美精品网站| 国产亚洲精品超碰| 91国产精品一区| 欧美激情综合色| 免费欧美视频| 国产乱叫456| 亚洲国产成人高清精品| 男人天堂网在线| 成人网欧美在线视频| 黄色一区二区三区四区| 白丝女仆被免费网站| 欧美日韩精品免费| 暖暖在线中文免费日本| 日本欧美精品久久久| 国产成人精品在线看| 国产免费av一区| 久久久国产成人精品| 欧美巨大xxxx| 男人的天堂最新网址| 亚洲超碰97人人做人人爱| 黄色软件在线| 91av一区二区三区| 丝袜a∨在线一区二区三区不卡| 久久人妻无码aⅴ毛片a片app | 日本天堂在线观看| 国产精品午夜av在线| 免费观看成人av| 国产无遮挡又黄又爽在线观看| 夜夜躁日日躁狠狠久久88av| 亚洲**毛片| 亚洲免费看av| 欧美日韩亚洲网| 在线免费观看的av| 午夜精品视频在线观看一区二区 | 好吊日免费视频|