首頁  >  文章  >  資料庫  >  幻讀和不可重複讀有什麼差別

幻讀和不可重複讀有什麼差別

王林
王林原創
2020-06-05 15:28:019801瀏覽

幻讀和不可重複讀有什麼差別

區別:

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

幻讀:同樣的條件下,第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教學

以上是幻讀和不可重複讀有什麼差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn