日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

【MySQL】可重复读模式下 unique key失效案例

發布時間:2025/4/14 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【MySQL】可重复读模式下 unique key失效案例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一?【背景】
? ?今天上午文能提筆安天下,武能上馬定乾坤的登博給團隊出了一道題目,誰先復現問題,獎勵星巴克一杯。激起了一群忙碌的屌絲DBA的極大熱情。問題是這樣滴,如下圖

登博提示了幾個細節:
? ?1. code上的uk并未失效。
? ?2. rr隔離級別。
? ?3. 有并發線程的操作。
二 【原理分析】
1 事務隔離級別的基礎知識:
  • ?未提交讀(Read Uncommitted):允許臟讀,也就是可能讀取到其他會話中未提交事務修改的數據。
  • ?提交讀(Read Committed):只能讀取到已經提交的數據。Oracle等多數數據庫默認都是該級別 (不重復讀)。
  • ?可重復讀(Repeated Read):可重復讀。在同一個事務內的查詢都是事務開始時刻一致的,InnoDB默認級別。在SQL標準中,該隔離級別消除了不可重復讀,但是還存在幻象讀。
  • ?串行讀(Serializable):完全串行化的讀,每次讀都需要獲得表級共享鎖,讀寫相互都會阻塞。
?這里重點說一下RR 模式:可重復讀 是指在一個事務內,多次讀同一數據。在這個事務還沒有結束時,另外一個事務也訪問該同一數據。那么,在第一個事務中的兩次讀數據之間,即使第二個事務對數據進行修改,第一個事務兩次讀到的的數據是一樣的。這樣就發生了在一個事務內兩次讀到的數據是一樣的,因此稱為是可重復讀。
2 MVCC 的讀操作

? ?在MVCC并發控制中,讀操作可以分成兩類:快照讀 (snapshot read)與當前讀 (current read)。快照讀,讀取的是記錄的可見版本 (有可能是歷史版本),不用加鎖。
當前讀,讀取的是記錄的最新版本,并且,當前讀返回的記錄,都會加上鎖,保證其他事務不會再并發修改這條記錄。
快照讀:簡單的select操作,屬于快照讀,不加鎖。
select * from table where ?;
當前讀:特殊的讀操作,插入/更新/刪除操作,屬于當前讀,需要加鎖。
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 ?;
所有以上的語句,都屬于當前讀,讀取記錄的最新版本。并且,讀取之后,還需要保證其他并發事務不能修改當前記錄,對讀取記錄加鎖。其中,除了第一條語句,對讀取記錄加S鎖 (共享鎖)外,其他的操作,都加的是X鎖 (排它鎖)。
注意:insert操作可能會觸發Unique Key的沖突檢查,也會進行一個當前讀。
?

三【解決.復現】
測試版本:?5.5.18 5.6.16 均可復現。
現在我們根據上述理論信息進行復現問題,具體的實現步驟如下:
注意 數據庫的隔離級別為RR?
session 1session 2
root@test 08:47:41>set global tx_isolation='REPEATABLE-READ';
Query OK, 0 rows affected (0.00 sec)
root@test 08:53:16>set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
root@test 08:53:22>insert into yy values(1,20,13);
Query OK, 1 row affected (0.00 sec)
root@test 08:53:31>commit;
Query OK, 0 rows affected (0.00 sec)
root@test 08:53:39>select * from yy;
+----+------+------+
| id | code | val? |
+----+------+------+
|? 1 |?? 20 |?? 13 |
+----+------+------+
1 row in set (0.00 sec)
?
?root@test 08:53:46>select * from yy;
+----+------+------+
| id | code | val? |
+----+------+------+
|? 1 |?? 20 |?? 13 |
+----+------+------+
1 row in set (0.00 sec)
root@test 08:53:53>delete from yy where id=1;
Query OK, 1 row affected (0.00 sec)
root@test 08:53:59>commit;
root@test 08:54:10>insert into yy values(2,20,13);
Query OK, 1 row affected (5.59 sec)
root@test 08:54:23>select * from yy;
+----+------+------+
| id | code | val? |
+----+------+------+
|? 1 |?? 20 |?? 13 |
|? 2 |?? 20 |?? 13 |
+----+------+------+
2 rows in set (0.00 sec)
?

當session 2中將id=1 的刪除之后,session1 進行insert操作時,觸發unique key沖突檢查,此時因為id=1 code=20的數據已經被物理刪除了,MySQL 檢查無沖突,進行insert?insert into yy values(2,20,13); 便成功了。
四【結果展示】


五【參考資料】
?1 《MySQL 加鎖分析》
?2 《Innodb中的事務隔離級別和鎖的關系》 原文blog: http://blog.itpub.net/22664653/viewspace-1612574/

轉載于:https://www.cnblogs.com/cyt1153/p/6576009.html

總結

以上是生活随笔為你收集整理的【MySQL】可重复读模式下 unique key失效案例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 快射视频网站 | 白丝少妇 | 巨乳免费观看 | 夫妻精品 | 青娱乐导航 | 台湾男男gay做爽爽的视频 | 夜夜爽夜夜操 | 特级西西人体 | 国产欧美日韩成人 | 日本伊人久久 | 久久久久亚洲av无码专区体验 | 亚洲精品合集 | 淫久久 | 亚洲精品视频在线观看视频 | 欧美深夜在线 | 日本不卡视频一区 | 女人性高潮视频 | 国产亚洲精品一区二区三区 | 都市激情男人天堂 | 欧美一区二区大片 | 中文字幕丰满乱子伦无码专区 | 伊人称影院 | 激情综合五月婷婷 | 国产精品成人国产乱 | 久久久噜噜噜 | 欧美人体视频一区二区三区 | 波多野结衣99| 免费观看毛片网站 | 艳妇臀荡乳欲伦交换在线看 | 亚州精品国产精品乱码不99按摩 | 驯服少爷漫画免费观看下拉式漫画 | 日韩毛片高清在线播放 | 最新黄色av | 国产福利一区视频 | 91视频色版| 波多野吉衣在线观看视频 | 国产一及片 | 在线a视频 | 天天干夜夜怕 | 免费99精品国产自在在线 | 欧美在线视频不卡 | 欧美图片一区二区三区 | 91美女网站 | 森泽佳奈中文字幕 | 五月天婷婷在线视频 | 亚洲欧美日韩另类在线 | 特级淫片裸体免费看 | 国产熟女一区二区丰满 | 91porn在线| 91国在线观看 | 奇米影视色 | 成年人免费在线看 | 天天澡天天狠天天天做 | avtt国产| 日产久久久久久 | 久色影视 | 男女一级特黄 | 国产欧美一区二区三区沐欲 | 亚洲精品免费在线播放 | 亚洲男人天堂视频 | 国产尤物精品 | 日本韩国欧美中文字幕 | av资源网在线观看 | 国内自拍偷拍网 | 女的被男的操 | 波多野一区二区三区 | 天天操夜夜操视频 | 国产中文 | 依人综合网 | 麻豆av一区二区 | 国产免费一区 | 99ri国产 | 国产在线拍揄自揄拍无码视频 | 人妻一区二区三区四区五区 | 欧美视频在线观看一区二区 | 日本精品在线观看视频 | 日韩欧美卡一卡二 | 久久97人妻无码一区二区三区 | 国产又猛又黄 | 麻豆视频免费网站 | 国产毛片电影 | 国产人成无码视频在线观看 | 夜操操| 尤物网站在线 | 国产三级久久 | av在线超碰 | 日韩成人在线看 | av导航在线观看 | 国产精品视频专区 | 免费一级a毛片夜夜看 | 天天cao| 原创露脸88av | 亚洲区综合| 国产免费黄色 | 最近国语视频在线观看免费播放 | 啪啪啪一区二区 | 久久一区欧美 | 希岛婚前侵犯中文字幕在线 | 97久久精品视频 |