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

MySQL 加鎖范圍三——普通索引和普通字段

數(shù)據(jù)庫 MySQL
普通索引等值查詢,因?yàn)椴荒艽_定唯一性,所以即使定位到記錄,也是會(huì)向后查詢,直到查詢到不為該值的記錄,從而鎖定該值的區(qū)間;普通索引的鎖也是加載該索引上的,如果涉及到存在的記錄,會(huì)對該主鍵加行鎖;普通索引的范圍查詢,同樣出現(xiàn) next-key 查詢下一個(gè)區(qū)間的 bug。

[[403887]]

前言

前面已經(jīng)介紹了主鍵索引的加鎖范圍和非主鍵唯一索引的加鎖范圍。

主鍵索引:

  1. 加鎖時(shí),會(huì)先給表添加意向鎖,IX 或 IS;
  2. 加鎖是如果是多個(gè)范圍,是分開加了多個(gè)鎖,每個(gè)范圍都有鎖;(這個(gè)可以實(shí)踐下 id < 20 的情況)
  3. 主鍵等值查詢,數(shù)據(jù)存在時(shí),會(huì)對該主鍵索引的值加行鎖 X,REC_NOT_GAP;
  4. 主鍵等值查詢,數(shù)據(jù)不存在時(shí),會(huì)對查詢條件主鍵值所在的間隙添加間隙鎖 X,GAP;
  5. 主鍵等值查詢,范圍查詢時(shí)情況則比較復(fù)雜:
  • 8.0.17 版本是前開后閉,而 8.0.18 版本及以后,修改為了前開后開區(qū)間;
  • 臨界 <= 查詢時(shí),8.0.17 會(huì)鎖住下一個(gè) next-key 的前開后閉區(qū)間,而 8.0.18 及以后版本,修復(fù)了這個(gè) bug。

非主鍵唯一索引:

  1. 非主鍵唯一索引等值查詢,數(shù)據(jù)存在,for update 是會(huì)在主鍵加鎖的,而 for share 只有在走覆蓋索引的情況下,會(huì)僅在自己索引上加鎖;
  2. 非主鍵索引等值查詢,數(shù)據(jù)不存在,無論是否索引覆蓋,相當(dāng)于一個(gè)范圍查詢,僅僅會(huì)在非主鍵索引上加鎖,加的還是間隙鎖,前開后開區(qū)間;
  3. 在非主鍵唯一索引范圍查詢時(shí),不是覆蓋索引的時(shí)候,會(huì)對相應(yīng)的范圍加前開后閉區(qū)間,并且如果存在數(shù)據(jù),會(huì)對對應(yīng)的主鍵加行鎖;
  4. 在非主鍵唯一索引范圍查詢時(shí),如果是覆蓋索引時(shí),會(huì)對所有的后閉區(qū)間對應(yīng)的主鍵,加行鎖;
  5. 在非主鍵唯一索引加鎖時(shí),還是存在 next-key 鎖住下一個(gè)區(qū)間的 bug。

這篇文章來一起看一下普通索引和普通字段的加鎖范圍是什么?

1數(shù)據(jù)庫表數(shù)據(jù)

  1. CREATE TABLE `t` ( 
  2.   `id` int NOT NULL COMMENT '主鍵'
  3.   `a` int DEFAULT NULL COMMENT '唯一索引'
  4.   `c` int DEFAULT NULL COMMENT '普通索引'
  5.   `d` int DEFAULT NULL
  6.   PRIMARY KEY (`id`), 
  7.   UNIQUE KEY `uniq_a` (`a`), 
  8.   KEY `idx_c` (`c`) 
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 

數(shù)據(jù)庫數(shù)據(jù)如下:

思路和非主鍵唯一索引相同,只不過唯一的區(qū)別是這里看的是 c 和 d 字段。

因?yàn)榍懊嫘』锇閷?data_locks 應(yīng)該有了一定的了解,這里就直接分析 data_locks 的數(shù)據(jù)信息。

2普通索引

普通索引等值查詢 —— 數(shù)據(jù)存在

  1. mysql> beginselect * from t where c = 210 for update

直接分析 data_locks

  1. 表意向鎖;
  2. 索引 idx_c 上添加了 210 區(qū)間的前開后閉鎖;
  3. 索引 idx_c 上添加了 215 區(qū)間的間隙鎖,LOCK_MODE 為 X,GAP;
  4. 主鍵上添加了 15 的行鎖 ,LOCK_MODE 為 X,REC_NOT_GAP。

主要是因?yàn)槠胀ㄋ饕荒芪ㄒ绘i定一條記錄,所以要鎖定該字段的前后范圍。

普通索引等值查詢 —— 數(shù)據(jù)不存在

  1. mysql> beginselect * from t where c = 211 for update

直接分析 data_locks

  1. 表意向鎖;
  2. 索引 idx_c 上添加了 215 區(qū)間的間隙鎖。

分析是因?yàn)閿?shù)據(jù)不存在,只需要鎖住 215 間隙就可以了,因?yàn)?215 和 210 肯定不屬于這個(gè)范圍。

普通索引范圍查詢

  1. mysql> beginselect * from t where c > 210 and c <= 215 for update

對于鎖住 idx_c 索引的 215 的前開后閉區(qū)間是可以理解的,但是鎖住了 220 就不太理解了,應(yīng)該也是那個(gè) bug 沒有完全修復(fù)。

普通字段

普通字段就更好理解了。

對普通字段而言,無論是哪個(gè)查詢,都需要掃描全部記錄,所以這個(gè)鎖直接加在了主鍵上,并且是鎖住全部的區(qū)間。

3總結(jié)

本文在基于第一篇和第二篇的基礎(chǔ)上,直接通過分析 data_locks 的信息,進(jìn)行判斷加鎖范圍。

  1. select * from performance_schema.data_locks; 
LOCK_MODE LOCK_DATA 鎖范圍
X,REC_NOT_GAP 15 15 那條數(shù)據(jù)的行鎖
X,GAP 15 15 那條數(shù)據(jù)之前的間隙,不包含 15
X 15 15 那條數(shù)據(jù)的間隙,包含 15
  1. LOCK_MODE = X 是前開后閉區(qū)間;
  2. X,GAP 是前開后開區(qū)間(間隙鎖);
  3. X,REC_NOT_GAP 行鎖。

從而得出普通索引和普通字段的結(jié)論。

普通索引

普通索引等值查詢,因?yàn)椴荒艽_定唯一性,所以即使定位到記錄,也是會(huì)向后查詢,直到查詢到不為該值的記錄,從而鎖定該值的區(qū)間;

普通索引的鎖也是加載該索引上的,如果涉及到存在的記錄,會(huì)對該主鍵加行鎖;

普通索引的范圍查詢,同樣出現(xiàn) next-key 查詢下一個(gè)區(qū)間的 bug。

普通字段

普通字段查詢,會(huì)查詢?nèi)恚@里鎖的話就會(huì)鎖住主鍵的所有區(qū)間。

本文轉(zhuǎn)載自微信公眾號(hào)「程序員小航」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系程序員小航公眾號(hào)。

 

責(zé)任編輯:武曉燕 來源: 程序員小航
相關(guān)推薦

2021-06-08 09:41:26

MySQL加鎖范圍

2022-01-27 11:02:04

索引數(shù)據(jù)存儲(chǔ)

2021-09-06 06:45:06

普通索引唯一

2023-02-10 10:14:59

普通索引唯一索引

2023-11-30 07:26:10

2016-08-25 10:30:34

測試Testin

2021-06-05 18:02:20

MySQL加鎖范圍

2023-01-02 11:30:36

Vanilla OSLinux

2012-08-02 10:48:03

Windows 8操作系統(tǒng)

2025-01-08 09:26:24

KubernetesContainer容器

2025-04-14 10:10:00

磁盤Linux磁盤擴(kuò)容

2021-05-11 08:22:32

Epoll 監(jiān)聽I

2021-10-13 06:31:52

APT網(wǎng)絡(luò)安全惡意軟件

2017-12-04 14:32:36

深度學(xué)習(xí)機(jī)器學(xué)習(xí)

2018-08-17 10:22:38

監(jiān)控專用硬盤

2023-01-07 17:58:22

2023-02-13 08:18:15

數(shù)據(jù)庫索引,

2015-12-28 10:11:27

BAT程序員工資

2016-02-18 12:01:00

2021-03-22 22:48:45

加密貨幣比特幣以太坊
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 中文成人在线 | www.婷婷亚洲基地 | 国产精品一区二区视频 | 青青久久久 | 国产资源在线观看 | 一区二区三区免费 | 五月婷婷色 | 亚洲国产精品第一区二区 | 农村真人裸体丰满少妇毛片 | 久久国产精品视频 | 在线日韩精品视频 | 欧美福利视频 | 日韩欧美国产一区二区三区 | 久久国产精品-久久精品 | 国产欧美日韩二区 | 亚洲精品电影网在线观看 | 一区二区三区视频免费观看 | 日日操视频 | 日韩三级在线观看 | 中文字幕在线三区 | 国产精品一区久久久久 | 特黄特色大片免费视频观看 | 欧美伦理一区 | 国产第一区二区 | 青青草在线视频免费观看 | 久久久久久国产精品三区 | 18成人在线观看 | 91传媒在线观看 | 国产精品久久久久一区二区三区 | 成人网址在线观看 | 91精品久久久久久久久中文字幕 | 青青久久久 | 成人区精品一区二区婷婷 | av天天干 | 欧美色综合一区二区三区 | 成人福利网站 | 久久久久久久久99精品 | 中文字幕成人在线 | 99re视频在线观看 | 国产成人午夜精品影院游乐网 | 99精品国产一区二区青青牛奶 |