日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

不可重复 幻读

發布時間:2023/12/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 不可重复 幻读 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

幻讀和不可重復讀的區別

2014年09月15日 20:51:27

閱讀數:26195

MySQl

MySql默認的隔離級別為Repeatable Read,因此只會出現幻讀的情況。

?

幻讀

事務在插入已經檢查過不存在的記錄時,驚奇的發現這些數據已經存在了,之前的檢測獲取到的數據如同鬼影一般。

例子:

在事務1中,查詢User表id為1的是用戶否存在,如果不存在則插入一條id為1的數據。

?

select * from User where id = 1;

在事務1查詢結束后,事務2往User表中插入了一條id為1的數據。

?

?

insert into `User`(`id`, `name`) values (1, 'Joonwhee');

此時,由于事務1查詢到id為1的用戶不存在,因此插入1條id為1的數據。

?

?

insert into ` User`(`id`, `name`) values (1, 'Chillax');

但是由于事務2已經插入了1條id為1的數據,因此此時會報主鍵沖突,對于事務1 的業務來說是執行失敗的,這里事務1 就是發生了幻讀,因為事務1讀取的數據狀態并不能支持他的下一步的業務,見鬼了一樣。這里要靈活的理解讀取的意思,第一次select是讀取,第二次的insert其實也屬于隱式的讀取,只不過是在mysql的機制中讀取的,插入數據也是要先讀取一下有沒有主鍵沖突才能決定是否執行插入。

?

Oracle

Oracle默認的隔離級別為Read?Committed,因此可能出現不可重復度和幻讀。

?

不可重復讀

同樣的條件,你讀取過的數據,再次讀取出來發現值不一樣了。

例子:

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

?

  • con1 = getConnection();

  • select salary from employee where employeeName ="JoonWhee";

  • ?

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

    ?

  • con2 = getConnection();

  • update employee set salary = 2000 where employeeName = "JoonWhee";

  • con2.commit();

  • ?

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

    ?

  • //con1

  • select salary from employee where employeeName ="JoonWhee";

  • ?

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

    ?

    幻讀

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

    例子:

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

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

    ?

  • con1 = getConnection();

  • Select * from employee where salary =1000;

  • ?

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

    ?

  • con2 = getConnection();

  • Insert into employee(employeeName,salary) values("Lili",1000);

  • con2.commit();

  • ?

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

    ?

  • //con1

  • select * from employee where salary =1000;

  • https://blog.csdn.net/v123411739/article/details/39298127

    總結

    以上是生活随笔為你收集整理的不可重复 幻读的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。