首先快照讀是不存在幻讀的,只有當(dāng)前讀(實(shí)時(shí)讀)才存在幻讀的問(wèn)題?;米x有什么問(wèn)題?select ...for update語(yǔ)句就是將相應(yīng)的數(shù)據(jù)行鎖住,但是如果存在幻讀,就把for update的語(yǔ)義破壞了。
創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、石鼓網(wǎng)絡(luò)推廣、微信小程序、石鼓網(wǎng)絡(luò)營(yíng)銷(xiāo)、石鼓企業(yè)策劃、石鼓品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供石鼓建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
其他:MySQL InnoDB 引擎 RR 隔離級(jí)別是否解決了幻讀引用一個(gè) github 上面的評(píng)論 地址:Mysqlguan 方給出的幻讀解釋是:只要在一個(gè)事務(wù)中,第二次select多出了row就算幻讀。
對(duì)于[ UPDATE ]語(yǔ)句,如果某行已被鎖定,則 InnoDB 執(zhí)行“半一致”讀取,將最新提交版本的數(shù)據(jù)返回給MySQL,以便MySQL可以確定該行是否符合 WHERE 條件。
據(jù)此,很多人判斷說(shuō)RR隔離級(jí)別下“不存在”幻讀。但果真如此嗎?--- 出現(xiàn)上面的試驗(yàn)結(jié)果,是因?yàn)樵赗R隔離級(jí)別事務(wù)下,Mysql會(huì)對(duì)前一次select的結(jié)果快照。
其他:MySQL InnoDB 引擎 RR 隔離級(jí)別是否解決了幻讀引用一個(gè) github 上面的評(píng)論 地址:Mysqlguan 方給出的幻讀解釋是:只要在一個(gè)事務(wù)中,第二次select多出了row就算幻讀。
幻讀指的是一個(gè)事務(wù)在前后兩次查詢同一個(gè)范圍的時(shí)候,后一次查詢看到了前一次查詢沒(méi)有看到的行。首先快照讀是不存在幻讀的,只有當(dāng)前讀(實(shí)時(shí)讀)才存在幻讀的問(wèn)題。
首先需要明確的就是“幻讀”概念: 隔離級(jí)別是可重復(fù)讀,在一個(gè)事務(wù)中前后兩次查詢,查到了其他事務(wù)insert進(jìn)來(lái)的數(shù)據(jù)。 強(qiáng)調(diào)的是讀取到了其他事務(wù)插入進(jìn)來(lái)的數(shù)據(jù)。
MySQL InnoDB 存儲(chǔ)引擎的默認(rèn)支持的隔離級(jí)別是 REPEATABLE-READ(可重讀) 。
產(chǎn)生幻讀的原因是,行鎖只能鎖住行,但是新插入記錄這個(gè)動(dòng)作,要更新的是記錄之間的“間隙”。因此,為了解決幻讀問(wèn)題,InnoDB只好引入新的鎖,也就是間隙鎖(Gap Lock)。
回到正題,之前提到一般情況下MySQL的InnoDB引擎在可重復(fù)讀的情況下是沒(méi)法保證不出現(xiàn)幻讀的,但實(shí)際情況是MySQL可以通過(guò)加鎖來(lái)防止幻讀的出現(xiàn),這種鎖定通過(guò)Next-key機(jī)制來(lái)實(shí)現(xiàn),是屬于記錄鎖和間隙鎖(Gap鎖)的結(jié)合。