亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

MySQL語句加鎖的實現分析

2024-07-24 13:14:48
字體:
來源:轉載
供稿:網友

摘要: MySQL兩條SQL語句鎖的分析

看一下下面的SQL語句加什么鎖

SLQ1:select * from t1 where id = 10;SQL2:delete from t1 where id = 10;

(1)id 是不是主鍵

(2)當前系統的隔離級別是什么

(3)id列如果不是主鍵,那么id列上有索引嗎

(4)id列上如果有二級索引,那么這個索引是二級索引嗎

(5)兩個SQL的執行計劃是什么?索引掃描還是全表掃描

實際的執行計劃需要根據MySQL的輸出為準

組合一:id列是主鍵,RC隔離級別
組合二:id列是二級唯一索引,RC隔離級別
組合三:id列是二級非唯一索引,RC隔離級別
組合四:id列沒有索引,RC隔離級別
組合五:id列是主鍵,RR隔離級別
組合六:id列是二級唯一索引,RR隔離級別
組合七:id列是二級非唯一索引,RR隔離級別
組合八:id列上沒有索引,RR隔離級別

Serializable隔離級別

在RR RC隔離級別下,SQL1:select 均不加鎖,采用的是快照讀;以下僅討論SQL2:delete操作的加鎖
Percona

組合一:id主鍵+RC
Percona

---TRANSACTION 1286310, ACTIVE 9 sec2 lock struct(s), heap size 360, 1 row lock(s), undo log entries 1MySQL thread id 341, OS thread handle 0x7f4d540d0700, query id 4510972 localhost root cleaning upTABLE LOCK table `test`.`t1` trx id 1286310 lock mode IXRECORD LOCKS space id 29 page no 3 n bits 80 index `PRIMARY` of table `test`.`t1` trx id 1286310 lock_mode X locks rec but not gap

MySQL

---TRANSACTION 5936, ACTIVE 171 sec2 lock struct(s), heap size 360, 1 row lock(s), undo log entries 1MySQL thread id 2, OS thread handle 0x7f5677201700, query id 364 localhost rootTABLE LOCK table `test`.`t1` trx id 5936 lock mode IXRECORD LOCKS space id 6 page no 3 n bits 80 index `PRIMARY` of table `test`.`t1` trx id 5936 lock_mode X locks rec but not gapRecord lock, heap no 5 PHYSICAL RECORD: n_fields 4; compact format; info bits 32 0: len 4; hex 8000000a; asc   ;; 1: len 6; hex 000000001730; asc   0;; 2: len 7; hex 26000001550110; asc &  U ;; 3: len 1; hex 61; asc a;;

組合二:id唯一索引+RC
在唯一索引上的更新需要兩個X鎖,一個對應唯一索引id=10 記錄,一個對應于聚簇索引name='d'的記錄
Percona

---TRANSACTION 1286327, ACTIVE 3 sec3 lock struct(s), heap size 360, 2 row lock(s), undo log entries 1MySQL thread id 344, OS thread handle 0x7f4d5404e700, query id 4510986 localhost root cleaning upTABLE LOCK table `test`.`t2` trx id 1286327 lock mode IXRECORD LOCKS space id 30 page no 4 n bits 80 index `id` of table `test`.`t2` trx id 1286327 lock_mode X locks rec but not gapRECORD LOCKS space id 30 page no 3 n bits 80 index `PRIMARY` of table `test`.`t2` trx id 1286327 lock_mode X locks rec but not gap

MySQL

---TRANSACTION 5938, ACTIVE 3 sec3 lock struct(s), heap size 360, 2 row lock(s), undo log entries 1MySQL thread id 2, OS thread handle 0x7f5677201700, query id 374 localhost rootTABLE LOCK table `test`.`t2` trx id 5938 lock mode IXRECORD LOCKS space id 7 page no 4 n bits 80 index `id` of table `test`.`t2` trx id 5938 lock_mode X locks rec but not gapRecord lock, heap no 7 PHYSICAL RECORD: n_fields 2; compact format; info bits 32 0: len 4; hex 8000000a; asc   ;; 1: len 1; hex 64; asc d;;RECORD LOCKS space id 7 page no 3 n bits 80 index `PRIMARY` of table `test`.`t2` trx id 5938 lock_mode X locks rec but not gapRecord lock, heap no 7 PHYSICAL RECORD: n_fields 4; compact format; info bits 32 0: len 1; hex 64; asc d;; 1: len 6; hex 000000001732; asc   2;; 2: len 7; hex 27000001560110; asc '  V ;; 3: len 4; hex 8000000a; asc   ;;

組合三:id非唯一索引+RC
ID列為普通索引,那么對應的所有滿足SQL查詢條件的記錄,都會被加鎖;同時,這些記錄在主鍵索引上的記錄,也會被加鎖
Percona

---TRANSACTION 1286339, ACTIVE 9 sec3 lock struct(s), heap size 360, 4 row lock(s), undo log entries 2MySQL thread id 347, OS thread handle 0x7f4b67fff700, query id 4511015 localhost root cleaning upTABLE LOCK table `test`.`t3` trx id 1286339 lock mode IXRECORD LOCKS space id 31 page no 4 n bits 80 index `idx_key` of table `test`.`t3` trx id 1286339 lock_mode X locks rec but not gapRECORD LOCKS space id 31 page no 3 n bits 80 index `PRIMARY` of table `test`.`t3` trx id 1286339 lock_mode X locks rec but not gap

MySQL

---TRANSACTION 5940, ACTIVE 3 sec3 lock struct(s), heap size 360, 4 row lock(s), undo log entries 2MySQL thread id 2, OS thread handle 0x7f5677201700, query id 378 localhost rootTABLE LOCK table `test`.`t3` trx id 5940 lock mode IXRECORD LOCKS space id 8 page no 4 n bits 80 index `idx_key` of table `test`.`t3` trx id 5940 lock_mode X locks rec but not gapRecord lock, heap no 4 PHYSICAL RECORD: n_fields 2; compact format; info bits 32 0: len 4; hex 8000000a; asc   ;; 1: len 1; hex 62; asc b;;Record lock, heap no 5 PHYSICAL RECORD: n_fields 2; compact format; info bits 32 0: len 4; hex 8000000a; asc   ;; 1: len 1; hex 64; asc d;;RECORD LOCKS space id 8 page no 3 n bits 80 index `PRIMARY` of table `test`.`t3` trx id 5940 lock_mode X locks rec but not gapRecord lock, heap no 4 PHYSICAL RECORD: n_fields 4; compact format; info bits 32 0: len 1; hex 62; asc b;; 1: len 6; hex 000000001734; asc   4;; 2: len 7; hex 28000001570110; asc (  W ;; 3: len 4; hex 8000000a; asc   ;;Record lock, heap no 5 PHYSICAL RECORD: n_fields 4; compact format; info bits 32 0: len 1; hex 64; asc d;; 1: len 6; hex 000000001734; asc   4;; 2: len 7; hex 28000001570132; asc (  W 2;; 3: len 4; hex 8000000a; asc   ;;

組合四:id無索引+RC
Percona

---TRANSACTION 1286373, ACTIVE 5 sec2 lock struct(s), heap size 360, 2 row lock(s), undo log entries 2MySQL thread id 348, OS thread handle 0x7f4d54193700, query id 4511037 localhost root cleaning upTABLE LOCK table `test`.`t4` trx id 1286373 lock mode IXRECORD LOCKS space id 33 page no 3 n bits 80 index `PRIMARY` of table `test`.`t4` trx id 1286373 lock_mode X locks rec but not gap

MySQL

---TRANSACTION 5946, ACTIVE 2 sec2 lock struct(s), heap size 360, 2 row lock(s), undo log entries 2MySQL thread id 2, OS thread handle 0x7f5677201700, query id 382 localhost rootTABLE LOCK table `test`.`t4` trx id 5946 lock mode IXRECORD LOCKS space id 9 page no 3 n bits 80 index `PRIMARY` of table `test`.`t4` trx id 5946 lock_mode X locks rec but not gapRecord lock, heap no 3 PHYSICAL RECORD: n_fields 4; compact format; info bits 32 0: len 1; hex 62; asc b;; 1: len 6; hex 00000000173a; asc   :;; 2: len 7; hex 2b0000015a0110; asc +  Z ;; 3: len 4; hex 8000000a; asc   ;;Record lock, heap no 5 PHYSICAL RECORD: n_fields 4; compact format; info bits 32 0: len 1; hex 64; asc d;; 1: len 6; hex 00000000173a; asc   :;; 2: len 7; hex 2b0000015a012c; asc +  Z ,;; 3: len 4; hex 8000000a; asc   ;;

組合五:id主鍵+RR
參考 組合一

組合六:id唯一索引+RR
參考 組合二

組合七:id非唯一索引+RR
Percona

---TRANSACTION 1592633, ACTIVE 24 sec4 lock struct(s), heap size 1184, 5 row lock(s), undo log entries 2MySQL thread id 794, OS thread handle 0x7f4d5404e700, query id 7801799 localhost root cleaning upTrx read view will not see trx with id >= 1592634, sees < 1592634TABLE LOCK table `test`.`t3` trx id 1592633 lock mode IXRECORD LOCKS space id 31 page no 4 n bits 80 index `idx_key` of table `test`.`t3` trx id 1592633 lock_mode XRECORD LOCKS space id 31 page no 3 n bits 80 index `PRIMARY` of table `test`.`t3` trx id 1592633 lock_mode X locks rec but not gapRECORD LOCKS space id 31 page no 4 n bits 80 index `idx_key` of table `test`.`t3` trx id 1592633 lock_mode X locks gap before rec

MySQL

---TRANSACTION 5985, ACTIVE 7 sec4 lock struct(s), heap size 1184, 5 row lock(s), undo log entries 2MySQL thread id 12, OS thread handle 0x7f56770fd700, query id 500 localhost rootTABLE LOCK table `test`.`t3` trx id 5985 lock mode IXRECORD LOCKS space id 8 page no 4 n bits 80 index `idx_key` of table `test`.`t3` trx id 5985 lock_mode XRecord lock, heap no 4 PHYSICAL RECORD: n_fields 2; compact format; info bits 32 0: len 4; hex 8000000a; asc   ;; 1: len 1; hex 64; asc d;;Record lock, heap no 5 PHYSICAL RECORD: n_fields 2; compact format; info bits 32 0: len 4; hex 8000000a; asc   ;; 1: len 1; hex 62; asc b;;RECORD LOCKS space id 8 page no 3 n bits 80 index `PRIMARY` of table `test`.`t3` trx id 5985 lock_mode X locks rec but not gapRecord lock, heap no 4 PHYSICAL RECORD: n_fields 4; compact format; info bits 32 0: len 1; hex 64; asc d;; 1: len 6; hex 000000001761; asc   a;; 2: len 7; hex 3f0000016d0132; asc ?  m 2;; 3: len 4; hex 8000000a; asc   ;;Record lock, heap no 5 PHYSICAL RECORD: n_fields 4; compact format; info bits 32 0: len 1; hex 62; asc b;; 1: len 6; hex 000000001761; asc   a;; 2: len 7; hex 3f0000016d0110; asc ?  m ;; 3: len 4; hex 8000000a; asc   ;;RECORD LOCKS space id 8 page no 4 n bits 80 index `idx_key` of table `test`.`t3` trx id 5985 lock_mode X locks gap before recRecord lock, heap no 8 PHYSICAL RECORD: n_fields 2; compact format; info bits 0 0: len 4; hex 8000000b; asc   ;; 1: len 1; hex 66; asc f;;

組合八:id無索引+RR
Percona

---TRANSACTION 1592639, ACTIVE 4 sec2 lock struct(s), heap size 360, 7 row lock(s), undo log entries 2MySQL thread id 794, OS thread handle 0x7f4d5404e700, query id 7801804 localhost root cleaning upTABLE LOCK table `test`.`t4` trx id 1592639 lock mode IXRECORD LOCKS space id 33 page no 3 n bits 80 index `PRIMARY` of table `test`.`t4` trx id 1592639 lock_mode X

MySQL

---TRANSACTION 6000, ACTIVE 3 sec2 lock struct(s), heap size 360, 7 row lock(s), undo log entries 2MySQL thread id 12, OS thread handle 0x7f56770fd700, query id 546 localhost rootTABLE LOCK table `test`.`t4` trx id 6000 lock mode IXRECORD LOCKS space id 9 page no 3 n bits 80 index `PRIMARY` of table `test`.`t4` trx id 6000 lock_mode XRecord lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0 0: len 8; hex 73757072656d756d; asc supremum;;Record lock, heap no 2 PHYSICAL RECORD: n_fields 4; compact format; info bits 0 0: len 1; hex 61; asc a;; 1: len 6; hex 000000001722; asc   ";; 2: len 7; hex 9e0000014e0110; asc   N ;; 3: len 4; hex 8000000f; asc   ;;Record lock, heap no 3 PHYSICAL RECORD: n_fields 4; compact format; info bits 32 0: len 1; hex 62; asc b;; 1: len 6; hex 000000001770; asc   p;; 2: len 7; hex 47000001730110; asc G  s ;; 3: len 4; hex 8000000a; asc   ;;Record lock, heap no 4 PHYSICAL RECORD: n_fields 4; compact format; info bits 0 0: len 1; hex 63; asc c;; 1: len 6; hex 000000001722; asc   ";; 2: len 7; hex 9e0000014e0122; asc   N ";; 3: len 4; hex 80000006; asc   ;;Record lock, heap no 5 PHYSICAL RECORD: n_fields 4; compact format; info bits 32 0: len 1; hex 64; asc d;; 1: len 6; hex 000000001770; asc   p;; 2: len 7; hex 4700000173012c; asc G  s ,;; 3: len 4; hex 8000000a; asc   ;;Record lock, heap no 6 PHYSICAL RECORD: n_fields 4; compact format; info bits 0 0: len 1; hex 66; asc f;; 1: len 6; hex 000000001722; asc   ";; 2: len 7; hex 9e0000014e0134; asc   N 4;; 3: len 4; hex 8000000b; asc   ;;Record lock, heap no 7 PHYSICAL RECORD: n_fields 4; compact format; info bits 0 0: len 2; hex 7a7a; asc zz;; 1: len 6; hex 000000001722; asc   ";; 2: len 7; hex 9e0000014e013d; asc   N =;; 3: len 4; hex 80000002; asc   ;;

組合九:Serializable

針對前面提到的簡單的SQL,最后一個情況:Serializable隔離級別。對于SQL2:delete from t1 where id = 10; 來說,Serializable隔離級別與Repeatable Read隔離級別完全一致,因此不做介紹。

Serializable隔離級別,影響的是SQL1:select * from t1 where id = 10; 這條SQL,在RC,RR隔離級別下,都是快照讀,不加鎖。但是在Serializable隔離級別,SQL1會加讀鎖,也就是說快照讀不復存在,MVCC并發控制降級為Lock-Based CC。

結論:在MySQL/InnoDB中,所謂的讀不加鎖,并不適用于所有的情況,而是隔離級別相關的。Serializable隔離級別,讀不加鎖就不再成立,所有的讀操作,都是當前讀。


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av电影在线免费播放| 国产亚洲精品激情久久| 全亚洲最色的网站在线观看| 久久久精品影院| 日韩美女福利视频| 精品久久久久久久久久久| 亚洲欧洲中文天堂| 亚洲人午夜色婷婷| 在线观看欧美日韩| 成人看片人aa| 性欧美xxxx视频在线观看| 久久久久久久久久亚洲| 亚洲性无码av在线| 精品亚洲夜色av98在线观看| 国产精品亚洲第一区| 亚洲成人精品久久| 国产精品91久久| 中文一区二区视频| 亚洲精品免费在线视频| 欧美一级电影免费在线观看| 欧美日本黄视频| 欧美激情一二区| 欧美小视频在线观看| 欧美成人免费va影院高清| 国产精品麻豆va在线播放| 精品亚洲精品福利线在观看| 在线观看欧美成人| 欧美黑人巨大精品一区二区| 一区二区欧美日韩视频| 欧美精品一二区| 日韩国产在线播放| 久久中文字幕国产| 日韩中文字幕在线精品| 97精品国产97久久久久久春色| 亚洲视频专区在线| 中文字幕日韩专区| 国产偷亚洲偷欧美偷精品| 日韩精品视频免费专区在线播放| 欧美激情欧美激情在线五月| 欧美亚洲另类视频| 久久夜精品香蕉| 国产免费一区二区三区在线能观看| 亚洲bt欧美bt日本bt| 日韩欧美国产高清91| 亚洲精品在线不卡| 亚洲女在线观看| 欧美极品欧美精品欧美视频| 92福利视频午夜1000合集在线观看| 欧美极品xxxx| 韩国美女主播一区| 97av在线影院| 久久国产精品电影| 日韩美女av在线免费观看| 国产视频精品va久久久久久| 欧美精品videossex88| 91精品成人久久| 亚洲成人久久网| 国产脚交av在线一区二区| 国产精品国产自产拍高清av水多| 久久九九全国免费精品观看| 北条麻妃一区二区在线观看| 亚洲男人第一网站| www.99久久热国产日韩欧美.com| 精品久久久久久电影| 97成人在线视频| 在线观看日韩www视频免费| 亚洲天堂影视av| 欧美性猛交xxxx乱大交3| 欧美激情综合亚洲一二区| 亚洲欧洲国产伦综合| 亚洲欧美日韩视频一区| 亚洲成人亚洲激情| 精品久久久久人成| 日韩成人av网址| 97涩涩爰在线观看亚洲| 久久久999精品免费| 国产在线播放91| 成人有码在线视频| 亚洲女在线观看| 亚洲欧美成人一区二区在线电影| 久久综合色影院| 中文字幕久热精品在线视频| 成人疯狂猛交xxx| 亚洲国产欧美精品| 久久成人一区二区| 欧美一区二区三区精品电影| 久久国产精彩视频| 日本韩国在线不卡| 日韩黄在线观看| 国产日韩视频在线观看| 国内精品模特av私拍在线观看| 亚洲成人精品视频| 欧美成人三级视频网站| 97超视频免费观看| 久久久久成人网| 国产一区私人高清影院| 精品无人区太爽高潮在线播放| 久久夜色撩人精品| 日韩精品中文字幕在线播放| 久久久亚洲福利精品午夜| 国产综合色香蕉精品| 最近2019中文字幕在线高清| 91精品久久久久久久久久入口| 92版电视剧仙鹤神针在线观看| 国产精品美乳一区二区免费| 成人亚洲综合色就1024| 亚洲国产天堂网精品网站| 日韩av在线免费观看一区| 高跟丝袜一区二区三区| 国产精品久久久久久搜索| 久久免费视频网站| 秋霞av国产精品一区| 国产精品亚洲美女av网站| 久久久久久国产三级电影| 欧美一区二区影院| 伊人成人开心激情综合网| 欧美日韩在线一区| 亚洲男子天堂网| 亚洲天堂男人的天堂| 日本人成精品视频在线| 国产精品香蕉av| 麻豆成人在线看| 精品丝袜一区二区三区| 欧美黑人性猛交| 亚洲精品乱码久久久久久按摩观| 国产精品日韩电影| 久久久欧美精品| 91精品在线一区| 国产69久久精品成人看| 另类图片亚洲另类| 国产一区私人高清影院| 日韩电影免费在线观看| 成人国产精品免费视频| 久久99久久99精品免观看粉嫩| 亚洲香蕉av在线一区二区三区| 亚洲第一区在线| 国产欧美精品一区二区三区-老狼| 亚洲精品久久久久久久久久久久久| 亚洲小视频在线观看| 欧美日韩另类在线| 成人国产精品av| 久久久久久噜噜噜久久久精品| 亚洲天堂男人天堂女人天堂| 久久九九免费视频| 久久久人成影片一区二区三区观看| 91av福利视频| 热久久视久久精品18亚洲精品| 国产v综合v亚洲欧美久久| 日韩成人在线网站| 97精品国产97久久久久久免费| 日韩www在线| 久久久久久久久久亚洲| 国产91精品高潮白浆喷水| 日韩国产精品一区| 亚洲欧美成人一区二区在线电影| 一区二区欧美激情| 精品国产依人香蕉在线精品| 久久久久久国产精品久久| 日韩在线视频免费观看高清中文| www国产91| 91嫩草在线视频| 操日韩av在线电影| 亚洲高清不卡av| 国产成人精彩在线视频九色|