幻讀和不可重復讀有什么區別

幻讀和不可重復讀有什么區別

區別:

不可重復讀:同樣的條件下,讀取過的數據,當我們再次讀取時值發生了變化。

幻讀:同樣的條件下,第1次和第2次讀出來的記錄數不一樣。

具體分析:

1、不可重復讀

同樣的條件下,讀取過的數據,當我們再次讀取時值發生了變化。

例子:

在事務1中,A讀取了自己的工資為1000,但是此時事務1的操作還并沒有完成 ,后面還有1次相同的讀取操作。

con1?=?getConnection(); select?salary?from?employee?where?employeeName?="A";

在事務2中,這時財務人員修改了A的工資為2000,并提交了事務。

con2?=?getConnection();???? update?employee?set?salary?=?2000?where?employeeName?=?"A";???? con2.commit();

在事務1中,A再次讀取自己的工資時,工資變為了2000 。

select?salary?from?employee?where?employeeName?="A";

在一個事務中前后兩次讀取的結果并不致,導致了不可重復讀。

2、幻讀

同樣的條件下,第1次和第2次讀出來的記錄數不一樣。

例子:

目前工資為1000的員工有5人。?

事務1,讀取所有工資為1000的員工,共讀取10條記錄 。

con1?=?getConnection();???? Select?*?from?employee?where?salary?=1000;

這時另一個事務向employee表插入了一條員工記錄,工資也為1000?

con2?=?getConnection();???? Insert?into?employee(employeeName,salary)?values("B",1000);???? con2.commit();

事務1再次讀取所有工資為1000的員工,共讀取到了6條記錄,這就產生了幻讀。?

//con1???? select?*?from?employee?where?salary?=1000;

推薦教程:mysql教程

? 版權聲明
THE END
喜歡就支持一下吧
點贊8 分享