新聞中心
mysql互聯(lián)網(wǎng)為什么用RC?
MySQL數(shù)據(jù)庫(kù)中默認(rèn)隔離級(jí)別為RR,但是實(shí)際情況是使用RC 和 RR隔離級(jí)別的都不少。

創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的嶗山網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
RC 與 RR 在鎖方面的區(qū)別
1> 顯然 RR 支持 gap lock(next-key lock),而RC則沒(méi)有g(shù)ap lock。因?yàn)镸ySQL的RR需要gap lock來(lái)解決幻讀問(wèn)題。而RC隔離級(jí)別則是允許存在不可重復(fù)讀和幻讀的。所以RC的并發(fā)一般要好于RR;
2> RC 隔離級(jí)別,通過(guò) where 條件過(guò)濾之后,不符合條件的記錄上的行鎖,會(huì)釋放掉(雖然這里破壞了“兩階段加鎖原則”);但是RR隔離級(jí)別,即使不符合where條件的記錄,也不會(huì)是否行鎖和gap lock;所以從鎖方面來(lái)看,RC的并發(fā)應(yīng)該要好于RR
mysql插入數(shù)據(jù)后還能有間隙鎖嗎?
有的。
mysql插入數(shù)據(jù)后,還能有間隙鎖的。
因?yàn)?,有些update/delete語(yǔ)句采用的是當(dāng)前讀,這會(huì)導(dǎo)致只有行鎖的情況下,產(chǎn)生幻讀,假設(shè)沒(méi)有間隙鎖,當(dāng)前讀中也會(huì)出現(xiàn)重復(fù)讀的問(wèn)題。
所以,mysql在rr隔離級(jí)別下解決幻讀問(wèn)題,采用的是行鎖+間隙鎖,兩者合稱(chēng)next-key lock。
數(shù)據(jù)庫(kù)哪個(gè)隔離級(jí)別可以實(shí)現(xiàn)臟讀?
對(duì)于同時(shí)運(yùn)行的多個(gè)事務(wù), 當(dāng)這些事務(wù)訪問(wèn)數(shù)據(jù)庫(kù)中相同的數(shù)據(jù)時(shí), 如果沒(méi)有采取必要的隔離機(jī)制, 就會(huì)導(dǎo)致各種并發(fā)問(wèn)題: ? 臟讀: 對(duì)于兩個(gè)事物 T1, T2, T1 讀取了已經(jīng)被 T2 更新但還沒(méi)有被提交的字段. 之后, 若 T2 回滾, T1讀取的內(nèi)容就是臨時(shí)且無(wú)效的. ? 不可重復(fù)讀: 對(duì)于兩個(gè)事物 T1, T2, T1 讀取了一個(gè)字段, 然后 T2 更新了該字段. 之后, T1再次讀取同一個(gè)字段, 值就不同了. ? 幻讀: 對(duì)于兩個(gè)事物 T1, T2, T1 從一個(gè)表中讀取了一個(gè)字段, 然后 T2 在該表中插入了一些新的行. 之后, 如果 T1 再次讀取同一個(gè)表, 就會(huì)多出幾行. 數(shù)據(jù)庫(kù)事務(wù)的隔離性: 數(shù)據(jù)庫(kù)系統(tǒng)必須具有隔離并發(fā)運(yùn)行各個(gè)事務(wù)的能力, 使它們不會(huì)相互影響, 避免各種并發(fā)問(wèn)題. 一個(gè)事務(wù)與其他事務(wù)隔離的程度稱(chēng)為隔離級(jí)別. 數(shù)據(jù)庫(kù)規(guī)定了多種事務(wù)隔離級(jí)別, 不同隔離級(jí)別對(duì)應(yīng)不同的干擾程度, 隔離級(jí)別越高, 數(shù)據(jù)一致性就越好, 但并發(fā)性越弱 數(shù)據(jù)庫(kù)提供了4中隔離級(jí)別: 隔離級(jí)別 描述 READ UNCOMMITTED(讀未提交數(shù)據(jù)) 允許事務(wù)讀取未被其他事務(wù)提交的變更,臟讀、不可重復(fù)讀和幻讀的問(wèn)題都會(huì)出現(xiàn) READ COMMITED(讀已提交數(shù)據(jù)) 只允許事務(wù)讀取已經(jīng)被其他事務(wù)提交的變更,可以避免臟讀,但不可重復(fù)讀和幻讀問(wèn)題仍然會(huì)出現(xiàn) REPEATABLE READ(可重復(fù)讀) 確保事務(wù)可以多次從一個(gè)字段中讀取相同的值,在這個(gè)事務(wù)持續(xù)期間,禁止其他事務(wù)對(duì)這個(gè)字段進(jìn)行更新,可以避免臟讀和不可重復(fù)讀,但幻讀的問(wèn)題依然存在 SERIALIZABLE(串行化) 確保事務(wù)可以從一個(gè)表中讀取相同的行,在這個(gè)事務(wù)持續(xù)期間,禁止其他事務(wù)對(duì)該表執(zhí)行插入、更新和刪除操作,所有并發(fā)問(wèn)題都可以避免,但性能十分低 Oracle 支持的 2 種事務(wù)隔離級(jí)別:READ COMMITED, SERIALIZABLE. Oracle 默認(rèn)的事務(wù)隔離級(jí)別為: READ COMMITED Mysql 支持 4 中事務(wù)隔離級(jí)別. Mysql 默認(rèn)的事務(wù)隔離級(jí)別為: REPEATABLE READ
到此,以上就是小編對(duì)于mysql怎么解決幻讀問(wèn)題的的問(wèn)題就介紹到這了,希望這3點(diǎn)解答對(duì)大家有用。
分享名稱(chēng):mysql怎么解決幻讀問(wèn)題
分享URL:http://www.5511xx.com/article/dhopigj.html


咨詢
建站咨詢
