MySQL中的幻讀和不可重復(fù)讀的區(qū)別是什么?這個問題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。通過這個問題,希望你能了解幻讀和不可重復(fù)讀的區(qū)別。
成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供溫嶺網(wǎng)站建設(shè)、溫嶺做網(wǎng)站、溫嶺網(wǎng)站設(shè)計、溫嶺網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、溫嶺企業(yè)網(wǎng)站模板建站服務(wù),十余年溫嶺做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
不可重復(fù)讀:同樣的條件下,讀取過的數(shù)據(jù),當(dāng)我們再次讀取時值發(fā)生了變化。
幻讀:同樣的條件下,第1次和第2次讀出來的記錄數(shù)不一樣。
具體分析:
1、不可重復(fù)讀
同樣的條件下,讀取過的數(shù)據(jù),當(dāng)我們再次讀取時值發(fā)生了變化。
例子:
在事務(wù)1中,A讀取了自己的工資為1000,但是此時事務(wù)1的操作還并沒有完成 ,后面還有1次相同的讀取操作。
con1 = getConnection(); select salary from employee where employeeName ="A";
在事務(wù)2中,這時財務(wù)人員修改了A的工資為2000,并提交了事務(wù)。
con2 = getConnection(); update employee set salary = 2000 where employeeName = "A"; con2.commit();
在事務(wù)1中,A再次讀取自己的工資時,工資變?yōu)榱?000 。
select salary from employee where employeeName ="A";
在一個事務(wù)中前后兩次讀取的結(jié)果并不致,導(dǎo)致了不可重復(fù)讀。
2、幻讀
同樣的條件下,第1次和第2次讀出來的記錄數(shù)不一樣。
例子:
目前工資為1000的員工有5人。
事務(wù)1,讀取所有工資為1000的員工,共讀取10條記錄 。
con1 = getConnection(); Select * from employee where salary =1000;
這時另一個事務(wù)向employee表插入了一條員工記錄,工資也為1000
con2 = getConnection(); Insert into employee(employeeName,salary) values("B",1000); con2.commit();
事務(wù)1再次讀取所有工資為1000的員工,共讀取到了6條記錄,這就產(chǎn)生了幻讀。
//con1 select * from employee where salary =1000;
看完上述內(nèi)容,你們對Mysql中的幻讀和不可重復(fù)讀的區(qū)別有進一步的了解嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。