Sql SqlServer 臟讀、 不可復讀和幻讀的理解


sql  SqlServer  不可復讀和幻讀的定義,是根據自己的理解寫出來的,不是真正的定義,哈哈!

一、定義

1.臟讀

   事務A向表中插入了一條數據,此時事務A還沒有提交,此時查詢語句能把這條數據查詢出來,這種現現象稱為臟讀;臟讀比較好理解

2.不可重復讀

   一個事務A第一次讀取的結果之后,  另外一個事務B更新了A事務讀取的數據,A事務在第二次讀取的結果和第一次讀取的結果不一樣這種現象稱為不可重復讀

3.幻讀   

   事務A更新表里面的所有數據,這時事務B向表中插入了一條數據,這時事務A第一次的查詢結果和第二次的查詢結果不一致,這種現象我稱為幻讀。

 

二、延伸

造成臟讀、不可復讀 和幻讀的根本原因是數據庫鎖的級別

 

隔離級別 臟讀(Dirty read) 不可重復讀(Non-repeatable read) 幻讀(Phantom read)
READ_UNCOMMITED 允許 允許 允許
READ_COMMITED 不允許 允許 允許
REPEATABLE_READ 不允許 不允許 允許
SERIALIZBLE 不允許 不允許 不允許

 

MySQL的默認事務隔離級別是REPEATABLE_READ,ORACLE、SQL Server、DB2和PostgreSQL的默認事務隔離級別是READ_COMMITED。

 

參考:http://blog.csdn.net/v123411739/article/details/39298127

          https://my.oschina.net/feichexia/blog/202520

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM