MySQL 幻讀

MySQL 在當(dāng)前讀的情況下,如果看到了其他事務(wù)新插入的一條數(shù)據(jù)构挤,這種情況稱為幻讀髓介。
是指一個事務(wù)在前后兩次查詢同一個范圍的時候,后一次查詢看到了前一次查詢沒有看到的行筋现。

  1. 可重復(fù)讀 的隔離級別下唐础,普通的查詢時快照讀,是不會看到別的事務(wù)插入的數(shù)據(jù)的矾飞。因此一膨,幻讀在“當(dāng)前讀” 下才會出現(xiàn)。
  2. 幻讀僅指新插入的行洒沦。

幻讀的影響

語義上的影響豹绪。例如下圖:


sessionA 聲明了“我要把所有 d=5 的行鎖住,不準(zhǔn)別的事務(wù)進(jìn)行再進(jìn)行操作”申眼。而實際上瞒津,這個語義被破壞了。

數(shù)據(jù)一致性的問題括尸。鎖的設(shè)計師為了保證數(shù)據(jù)的一致性巷蚪,一致性不只是數(shù)據(jù)庫內(nèi)部數(shù)據(jù)狀態(tài)的一致性,還包含了數(shù)據(jù)和日志在邏輯上的一致性濒翻。

如果出現(xiàn)幻讀屁柏,數(shù)據(jù)庫的binlog 的順序就會錯亂啦膜,因為 binlog 是在事務(wù)提交之后記錄的。如果使用了這樣的binlog 去備庫執(zhí)行或是克隆一個庫前联,就會出問題。

如何解決幻讀

為了解決幻讀娶眷,InnoDB 引入了新的鎖似嗤,就是間隙鎖(gap lock)。

間隙鎖就是在執(zhí)行當(dāng)前讀的時候届宠,不止是給數(shù)據(jù)庫已有的數(shù)據(jù)加上行鎖烁落,還同時加了間隙鎖,確保無法插入新的記錄豌注。

間隙鎖只跟“往這個間隙中插入一條記錄”這個操作沖突伤塌。間隙鎖之間不存在沖突。

間隙鎖與行鎖并稱為 next-key lock轧铁。

但是間隙鎖的引入每聪,可能會導(dǎo)致同樣的語句鎖住了更大的范圍,這其實是影響了并發(fā)度的齿风。如果兩個事務(wù)同時插入一條數(shù)據(jù)药薯,而且持有同樣的間隙鎖,就會產(chǎn)生死鎖救斑。

有的公司會使用讀提交的隔離級別童本,然后把 binlog 的格式設(shè)置為 row,也可以解決間隙鎖會產(chǎn)生死鎖的問題脸候。但是具體的業(yè)務(wù)也需要具體分析穷娱。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市运沦,隨后出現(xiàn)的幾起案子泵额,更是在濱河造成了極大的恐慌,老刑警劉巖携添,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梯刚,死亡現(xiàn)場離奇詭異,居然都是意外死亡薪寓,警方通過查閱死者的電腦和手機亡资,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來向叉,“玉大人锥腻,你說我怎么就攤上這事∧富眩” “怎么了瘦黑?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我幸斥,道長匹摇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任甲葬,我火速辦了婚禮廊勃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘经窖。我一直安慰自己坡垫,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布画侣。 她就那樣靜靜地躺著冰悠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪配乱。 梳的紋絲不亂的頭發(fā)上溉卓,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音搬泥,去河邊找鬼的诵。 笑死,一個胖子當(dāng)著我的面吹牛佑钾,可吹牛的內(nèi)容都是我干的西疤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼休溶,長吁一口氣:“原來是場噩夢啊……” “哼代赁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起兽掰,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤芭碍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后孽尽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窖壕,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年杉女,在試婚紗的時候發(fā)現(xiàn)自己被綠了瞻讽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡熏挎,死狀恐怖速勇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坎拐,我是刑警寧澤烦磁,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布养匈,位于F島的核電站,受9級特大地震影響都伪,放射性物質(zhì)發(fā)生泄漏呕乎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一陨晶、第九天 我趴在偏房一處隱蔽的房頂上張望猬仁。 院中可真熱鬧,春花似錦珍逸、人聲如沸逐虚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至撮躁,卻和暖如春漱病,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背把曼。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工杨帽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嗤军。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓注盈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親叙赚。 傳聞我的和親對象是個殘疾皇子老客,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 幻讀(phantom read) 前提條件:InnoDB引擎,可重復(fù)讀隔離級別震叮,使用當(dāng)前讀時胧砰。 表現(xiàn):一個事務(wù)(同...
    慧鑫coming閱讀 69,826評論 6 36
  • 1.什么是幻讀幻讀尉间,并不是說兩次讀取獲取的結(jié)果集不同,幻讀側(cè)重的方面是某一次的 select 操作得到的結(jié)果所表征...
    czcphp閱讀 1,876評論 1 3
  • 事務(wù)可以用來維護(hù)數(shù)據(jù)庫的完整性,保證成批的 SQL 語句要么全部執(zhí)行媳禁,要么全部不執(zhí)行撤蚊。MySQL 中只有使用了 I...
    伊凡的一天閱讀 2,372評論 3 22
  • 幻讀 首先我們要搞明白何謂幻讀,目前網(wǎng)上的眾多解釋幻讀的博文個人感覺仔細(xì)設(shè)想一下就能找出推翻的例子损话,就像博文把 非...
    小陳阿飛閱讀 2,015評論 0 1
  • 緩存的場景各種各樣侦啸,稍微一改代碼就大不相同槽唾。所以我寫的只是這一種場景:緩存一個頁面(只是一個頁面!)光涂,并且記錄下這...
    小北呀_閱讀 376評論 0 0