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

首頁(yè) > 數(shù)據(jù)庫(kù) > MySQL > 正文

RR與RC隔離級(jí)別下索引和鎖的測(cè)試腳本示例代碼

2024-07-25 19:09:23
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

基本概念

當(dāng)前讀與快照讀

在MVCC中,讀操作可以分成兩類:快照讀 (snapshot read)與當(dāng)前讀 (current read)。 快照讀,讀取的是記錄的可見(jiàn)版本 (有可能是歷史版本),不用加鎖。當(dāng)前讀,讀取的是記錄的最新版本,并且對(duì)返回的記錄,都會(huì)加上鎖,保證在事務(wù)結(jié)束前,這條數(shù)據(jù)都是最新版本。

快照讀:簡(jiǎn)單的select操作,屬于快照讀,不加鎖(Serializable除外)。

select * from table where ?;

當(dāng)前讀:特殊的讀操作,插入/更新/刪除操作,屬于當(dāng)前讀,需要加鎖?!?/p>

select * from table where ? lock in share mode;select * from table where ? for update;insert into table values ();update table set ? where ?;delete from table where ?;

隔離級(jí)別與加鎖機(jī)制

  • Read Uncommitted 會(huì)發(fā)生臟讀,不考慮。
  • Read Committed (RC) 針對(duì)當(dāng)前讀,RC隔離級(jí)別保證對(duì)讀取到的記錄加鎖 (Gap Locking),存在幻讀現(xiàn)象。
  • Repeatable Read (RR) 針對(duì)當(dāng)前讀,RR隔離級(jí)別保證對(duì)讀取到的記錄加鎖 (Record Locking),同時(shí)保證對(duì)讀取的范圍加鎖,新的滿足查詢條件的記錄不能夠插入 (Gap Locking),不存在幻讀現(xiàn)象。
  • Serializable 所有的讀操作均為退化為當(dāng)前讀,讀寫(xiě)沖突,因此并發(fā)度急劇下降,不考慮。

測(cè)試腳本

-- 基本操作 ---- 查詢事務(wù)隔離級(jí)別,默認(rèn)是RRshow variables like '%isolation%';-- 設(shè)置事務(wù)隔離級(jí)別為RCset session transaction isolation level read committed;-- 數(shù)據(jù)初始化 --begin;drop table if exists user;CREATE TABLE `user` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `email` varchar(64) NOT NULL, `age` int(11) NOT NULL, `address` varchar(64) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uniq_email` (`email`), KEY `idx_age` (`age`));insert into user (email, age, address) values ("test1@elsef.com", 18, "address1");insert into user (email, age, address) values ("test2@elsef.com", 20, "address2");insert into user (email, age, address) values ("test3@elsef.com", 20, "address3");commit;select * from user;-- 一、trx_id示例begin;SELECT TRX_ID FROM INFORMATION_SCHEMA.INNODB_TRX WHERE TRX_MYSQL_THREAD_ID = CONNECTION_ID();select * from user;SELECT TRX_ID FROM INFORMATION_SCHEMA.INNODB_TRX WHERE TRX_MYSQL_THREAD_ID = CONNECTION_ID();SHOW ENGINE INNODB STATUS;update user set age = 22 where id = 3;-- 查詢事務(wù)idSELECT TRX_ID FROM INFORMATION_SCHEMA.INNODB_TRX WHERE TRX_MYSQL_THREAD_ID = CONNECTION_ID();-- INNODB 引擎狀態(tài)SHOW ENGINE INNODB STATUS;commit;-- 二、可重復(fù)讀、不可重復(fù)讀示例-- session1set session transaction isolation level read committed;begin;-- session2set session transaction isolation level repeatable read;begin;-- session1select * from user;-- session2select * from user;-- session3begin;insert into user (email, age, address) values ("test4@elsef.com", 30, "address4");commit;-- session1 這里因?yàn)槭荝C,所以可以讀到trx3提交的新數(shù)據(jù),這里如果是證明不可重復(fù)讀的話應(yīng)該使用update而不是insertselect * from user;commit;-- session2 這里因?yàn)槭荝R,所以不會(huì)讀到trx3提交的新數(shù)據(jù)select * from user;commit;-- 三、快照讀幻讀示例-- session1set session transaction isolation level repeatable read;begin;-- 這里使用快照讀select * from user;-- session2begin;insert into user (email, age, address) values ("test4@elsef.com", 30, "address4");commit;select * from user;-- session1select * from user; -- 這里讀不到test4@的數(shù)據(jù),因?yàn)槭荝R-- 這里發(fā)生了幻讀insert into user (email, age, address) values ("test4@elsef.com", 30, "address4"); -- 插入失敗因?yàn)閑mail唯一索引沖突commit;-- 四、當(dāng)前讀幻讀示例-- RC-- session1set session transaction isolation level read committed;begin;-- 這里會(huì)對(duì)所有滿足條件的age=20的記錄加鎖,因?yàn)槭荝C,所以沒(méi)有GAP鎖delete from user where age = 20;select * from user;-- session2set session transaction isolation level read committed;begin;-- 因?yàn)閠rx1沒(méi)有加GAP鎖,所以之類可以插入age=20的記錄insert into user (email, age, address) values ("test4@elsef.com", 20, "address4");select * from user; -- 可以查到4條數(shù)據(jù),可以讀到trx1的刪除數(shù)據(jù),因?yàn)槭荝C,trx1未提交所以沒(méi)影響trx2commit;-- session1select * from user; -- 可以讀到trx2新插入的數(shù)據(jù),雖然trx1是當(dāng)前讀,但是并未添加相應(yīng)的next-key鎖,沒(méi)有阻止trx2的新數(shù)據(jù)插入commit;--RR-- session1set session transaction isolation level repeatable read;begin;delete from user where age = 20;select * from user;-- session2begin;-- 這里會(huì)阻塞,因?yàn)閠rx1在age=20周圍加了GAP鎖-- 非唯一索引,首先,通過(guò)索引定位到第一條滿足查詢條件的記錄,加記錄上的X鎖,加GAP上的GAP鎖,然后加主鍵聚簇索引上的記錄X鎖;-- 然后讀取下一條,重復(fù)進(jìn)行。直至進(jìn)行到第一條不滿足條件的記錄,此時(shí),不需要加記錄X鎖,但是仍舊需要加GAP鎖,最后返回結(jié)束。insert into user (email, age, address) values ("test4@elsef.com", 20, "address4");-- 直到超時(shí),ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction-- 此時(shí)如果查詢可以看到3條記錄commit;-- session1-- 此時(shí)只能看到1條記錄,另外兩條被刪除了select * from user;commit;-- 唯一索引+RC-- session1set session transaction isolation level read committed;begin;delete from user where email = "test3@elsef.com";-- session2begin;-- 可以讀到,因?yàn)閠rx1是RCselect * from user where email = "test3@elsef.com";-- 嘗試更新這個(gè)記錄的age,會(huì)阻塞直到超時(shí),因?yàn)閑mail是唯一索引已經(jīng)被trx1鎖住了,同時(shí)也會(huì)在對(duì)應(yīng)的主鍵索引上加鎖-- 注意這里操作的id=3就是trx1中操作的email的同一行記錄update user set age = 40 where id = 3;-- session1commit;-- session2commit;-- 無(wú)索引+RC-- session1set session transaction isolation level read committed;begin;-- 由于address字段無(wú)索引,所以Innodb會(huì)對(duì)所有行進(jìn)行加鎖,由MySQL server進(jìn)行判斷并釋放鎖delete from user where address = "address3";-- session2set session transaction isolation level read committed;begin;-- 這一行會(huì)成功,因?yàn)檫@一行沒(méi)有加鎖(先加了后釋放了)update user set age = 10 where address = "address2";-- 這一行同樣會(huì)被阻塞,原因是它已經(jīng)被trx1的語(yǔ)句加了鎖了,全部符合條件的都加鎖了update user set age = 10 where address = "address3";-- session1commit;-- session2commit;-- 非唯一索引+RR-- session1set session transaction isolation level repeatable read;begin;delete from user where age = 20;-- session2set session transaction isolation level repeatable read;begin;-- 這里會(huì)阻塞,因?yàn)閠rx1中已經(jīng)鎖住了age=20的記錄以及加上了GAP鎖,所以這里18已經(jīng)落入鎖區(qū)間insert into user (email, age, address) values ("test4@elsef.com", 18, "address4");-- session1commit;-- session2commit;-- 無(wú)索引RR-- session1set session transaction isolation level repeatable read;begin;-- 沒(méi)有索引,那么會(huì)鎖上表中的所有記錄,同時(shí)會(huì)鎖上主鍵索引上的所有GAP,杜絕所有的并發(fā)更新操作delete from user where address = "address3";-- session2set session transaction isolation level repeatable read;begin;-- 這里會(huì)阻塞,原因是主鍵已經(jīng)被加上了GAP鎖,所以新的插入不能執(zhí)行成功insert into user (email, age, address) values ("test4@elsef.com", 18, "address4");-- session1commit;-- session2commit;-- 死鎖 簡(jiǎn)單示例-- session1begin;delete from user where id = 1;-- session2begin;delete from user where id = 3;-- session1delete from user where id = 3;-- seession2-- 這里MySQL判斷發(fā)生了死鎖,中斷了一個(gè)trx-- ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transactiondelete from user where id = 1;-- session1rollback;-- session2;rollback;-- 五、死鎖 insert示例drop table if exists t1;begin;create table t1 ( `id` bigint not null auto_increment, primary key (`id`));insert into t1 values(1);insert into t1 values(5);commit;select * from t1;-- session1begin;insert into t1 values (2);-- sessioin2begin;-- 這里會(huì)阻塞insert into t1 values (2);-- session3begin;-- 這里會(huì)阻塞insert into t1 values (2);-- session1;-- 此時(shí)回滾,trx2和trx3收到通知,MySQL自動(dòng)中斷一個(gè)trx,因?yàn)榘l(fā)生了死鎖-- ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transactionrollback;--session2;rollback;--session3;rollback;

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到MYSQL教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国精品日韩欧美一区二区三区| 欧美videos另类| 五月婷婷狠狠干| 少妇精品久久久久久久久久| 一色屋成人免费精品网站| 欧美jizzhd欧美精品巨大| 中文字幕在线播放一区二区| 日本一区二区精品视频| 日韩在线欧美在线国产在线| 图片区小说区国产精品视频| 97久久香蕉国产线看观看| 欧美大香线蕉线伊人久久| 国产美女高潮在线观看| 亚洲视频自拍偷拍| 欧美人在线观看| 亚洲free性xxxx护士hd| caoporn免费在线视频| 成人动漫在线免费观看| 神马久久久久久| 欧美日韩精品一二三区| 亚洲三级视频在线观看| 亚洲视频在线观看日本a| 国产一区二区三区免费播放| 色噜噜狠狠色综合欧洲selulu| 一本之道久久| 国产永久免费高清在线观看视频| 国精一区二区| 亚洲成a人片77777精品| 欧美调教femdomvk| 麻豆久久久久| 海角社区69精品视频| www.91精品| 国产黄色在线看| 国产综合久久久久| 免费影视亚洲| 欧美主播福利视频| 国产欧美自拍一区| 亚洲 欧美 成人| 日韩国产成人无码av毛片| 成人精品在线观看视频| 国内精品二区| 日本黄色网网页| 色哟哟免费在线观看| 国内精品**久久毛片app| 极品尤物av丝袜美腿在线观看| 亚洲人成色77777| 暖暖视频在线免费观看| 国产成人精品一区二三区四区五区| 性感女国产在线| 婷婷综合久久| 中文字幕乱码亚洲精品一区| 3d成人动漫在线| 导航艳情国产电影| 国产午夜福利视频在线观看| 国产成人无遮挡在线视频| 五月婷婷狠狠干| 亚洲精品18在线观看| 亚洲欧美在线播放| 富二代精品短视频| 免费福利在线视频| 国产精品日韩欧美大师| 久久久久天天天天| 午夜在线观看91| 黄色网址中文字幕| 奇米影视亚洲色图| 波多野结衣毛片| 热舞福利精品大尺度视频| 亚洲欧美日韩一区二区三区四区| 久久这里只有| 成人高清在线| 少妇丰满尤物大尺度写真| 色哟哟日韩精品| 亚洲日本va在线观看| 四虎4hutv紧急入口| 国产成人麻豆精品午夜在线| 99超碰麻豆| 免费在线观看黄色av| 成人一区视频| 高清中文字幕一区二区三区| 日韩欧美色综合| 91在线看国产| 天天爽夜夜爽一区二区三区| 性中国xxx极品hd| 日韩欧美黄色| 亚洲制服少妇| 欧美亚洲精品日韩| 99久久精品免费看国产交换| 爱福利视频一区| www.av中文字幕| 亚洲欧美精品一区二区三区| 国产精品欧美一区二区| 国产精品1区2区在线观看| 日本高清在线观看wwwww色| 狠狠干五月天| 精品综合久久88少妇激情| 国产99久久久国产精品潘金| www.亚洲.com| 91在线视频免费播放| 久久国产精品毛片| 无码少妇精品一区二区免费动态| 亚洲一区二区在线免费观看| 欧美aa在线视频| yy6080久久伦理一区二区| 精品国产乱码久久久久久图片| аⅴ天堂中文在线网| 国产高清视频免费在线观看| 有码中文亚洲精品| 国模视频一区二区| 亚洲欧美国产高清va在线播放| 一个人看的www视频免费观看| 欧美性猛交xxxx| 欧美高清视频一区二区三区在线观看| 99精品在线免费| 免费在线一级片| 国产高潮失禁喷水爽到抽搐| heyzo欧美激情| 欧美日韩裸体免费视频| 自拍偷拍校园春色| 国产视频亚洲视频| 亚洲av无码一区二区三区在线| 四虎亚洲精品| 午夜免费播放观看在线视频| 中国一区二区三区| 欧美xxxxx18| 影音先锋一区二区资源站| 3dmax动漫人物在线看| 蜜桃视频成人在线观看| 日韩av一卡二卡| 亚洲美女91| 国产中文欧美日韩在线| 中日韩脚交footjobhd| 国产精品无码久久av| 日韩美女中文字幕| 亚洲一区二区三区乱码aⅴ| 亚洲国产精品va在线看黑人动漫| 91 com成人网| 日韩精品视频在线观看一区二区三区| 欧美va在线观看| 久久99这里只有精品| 久久青草免费| 久久精品视频导航| 日b视频免费观看| 一区二区三区国产精华| 艹b视频在线观看| 懂色av粉嫩av蜜臀av一区二区三区| 日本一区二区三区电影免费观看| 四虎国产精品永久免费观看视频| 日韩成人在线视频| 亚洲精品日韩丝袜精品| 日韩激情中文字幕| 精品国产欧美| 国产视频第一页在线观看| 青青成人在线| 电影天堂国产精品| 国产曰肥老太婆无遮挡| 九九久久国产精品| 可以免费看不卡的av网站| 成人av免费观看| 韩国在线一区| 亚洲黄色天堂| 日韩一级片网址| 9.1在线观看免费| 任你弄精品视频免费观看| 亚洲第一搞黄网站| 亚洲h精品动漫在线观看| 久久综合狠狠综合久久综合88| 欧美日韩**字幕一区| 午夜视频福利在线| 99久久人妻精品免费二区| 黄色大片免费观看| 国产精品免费播放| 久久久久久久久久伊人| 丰满人妻一区二区三区大胸| 成人在线免费观看91| 国产精品第一页在线观看| 在线观看不卡一区| 做爰无遮挡三级| 免费一级淫片aaa片毛片a级| 欧美日韩国产经典色站一区二区三区| 国产无遮挡又黄又爽在线观看| 国产一区二区三区在线播放免费观看| 九九热在线视频播放| 少妇精品一区二区| 欧美日韩国产成人高清视频| 亚洲aa在线| 久久久国产高清| 国产一区二区三区网站| 成都免费高清电影| 伊人久久综合影院| 精品久久成人| 久久99精品国产99久久| 亚洲大胆人体在线| 蜜桃传媒在线| 免费观看成年在线视频网站| 97精品电影院| 成人动漫在线观看视频| 欧美中文字幕久久| 欧美影院一区二区| 中文字幕久久综合| 国产精品video| 国产传媒久久文化传媒| 少妇人妻在线视频| 欧美黑人精品一区二区不卡| 欧美日韩在线视频免费播放| 亚洲欧美一区在线| 人人澡人人透人人爽| 蜜臀av一区二区在线观看| 欧美日韩在线观看一区二区| 黄色一区二区三区| 亚洲pron| 国产中文字幕在线看| 九一免费在线观看| 国产一区二区福利| 欧洲三级视频| 五月婷婷丁香六月| 亚洲欧美电影在线观看| 免费视频一区| 欧美午夜性生活| 日本一区二区三区免费看| 欧美一级欧美一级| 久久久久国产精品麻豆ai换脸| 欧美猛男性生活免费| 欧美激情网友自拍| 亚洲精品按摩视频| 四虎4545www精品视频| 日日噜噜夜夜狠狠视频| 国产综合久久久久影院| 午夜视频在线观看韩国| 最新国产热播激情视频| 久久视频精品| 91在线观看喷潮| 最新日韩中文字幕| 亚洲国产一区二区a毛片| 亚洲视频在线不卡| 国产97色在线 | 日韩| 免费看的黄网站| 日韩精品高清不卡| 91丨九色丨蝌蚪富婆spa| 国产福利小视频在线观看| 久久久av毛片精品| 轻轻色免费在线视频| 综合久久2o19| 欧美日韩欧美一区二区| 黄色在线免费| 91精品久久久久久久久久久久| 欧美日韩国产首页| 3344国产精品免费看| 亚洲a∨无码无在线观看| 亚洲www永久成人夜色| 日韩精品手机在线观看| 精品乱子伦一区二区三区| 国产成人免费视频精品含羞草妖精| 欧美欧美欧美| 欧美国产日本高清在线| 亚洲私人黄色宅男| 日韩成人dvd| 一区二区三区四区影院| 中文字幕视频在线免费欧美日韩综合在线看| 蜜桃tv一区二区三区| 在线免费亚洲电影| 国产精品av久久久久久无| 在线看视频你懂的| 欧美色手机在线观看| 91碰在线视频| 国产午夜精品在线| 国产日韩欧美在线一区| 亚洲天堂2018av| 色吊丝一区二区| 亚洲AV无码乱码国产精品牛牛| 国产午夜在线播放| 日av在线不卡| 国产精品综合av一区二区国产馆| 国产精品美女主播在线观看纯欲| 日日摸日日碰夜夜爽无码| 精品视频一区二区三区| 午夜成人鲁丝片午夜精品| 国精品**一区二区三区在线蜜桃| 狠狠操在线视频| 91精品国产乱码久久久久久久| 黄网站app在线观看大全免费视频| 午夜视频在线观看网站| 久久国产精品电影| 国产精品久久久久久久久借妻| 俺去啦;欧美日韩| 亚洲私人黄色宅男| 黄色网页在线看| 在线观看国产成人av片| 青梅竹马是消防员在线| 日韩精品成人| 亚洲日本va中文字幕久久| 婷婷久久国产对白刺激五月99| 毛片网站免费| 毛片av一区二区三区| 黄网页免费在线观看| 亚洲毛茸茸少妇高潮呻吟| 中日韩高清电影网| 黄网站在线观看永久免费| 精品一区二区免费视频| 欧美大片一区二区三区| 国产成人亚洲综合色影视| 99re6热只有精品免费观看| 精品欧美日韩精品| 18深夜视频在线观看| 国产浪潮av性色av小说| 国产精品成人va在线观看| 中文字幕av日韩精品| 免费在线观看的电影网站| 91制片厂毛片| 国产在线精品一区在线观看麻豆| www.成人av| 亚洲欧美日韩在线| 一呦二呦三呦国产精品| 日韩美女网站| free性欧美高清另类| 日韩av在线电影网| 国产精品久久久久久久精| 国内精品国产成人国产三级| 99视频免费在线观看| 久久影视一区二区| 九九热爱视频精品视频| 成人免费直播live| 第四色在线视频| 国产va免费精品观看精品| 污网站免费在线| 国产精品久久观看| 国产一区日韩一区| 日韩高清在线一区| av无码一区二区三区|