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