1. 程式人生 > >事物的隔離級別及產生的影響髒讀 不可重複讀 幻讀

事物的隔離級別及產生的影響髒讀 不可重複讀 幻讀

事務隔離四種級
TRANSACTION_READ_UNCOMMITTED (RU) 允許髒讀。
TRANSACTION_READ_COMMITTED (RC) 防止髒讀,最常用的隔離級別,並且是大多數資料庫的預設隔離級別
TRANSACTION_REPEATABLE_READ (RR) 可以防止髒讀和不可重複讀,
TRANSACTION_SERIALIZABLE 可以防止髒讀,不可重複讀取和幻讀,(事務序列化)會降低資料庫的效率

髒讀(Dirty Read)
髒讀意味著一個事務讀取了另一個事務未提交的資料,而這個資料是有可能回滾

不可重複讀(Unrepeatable Read)
不可重複讀意味著,在資料庫訪問中,一個事務範圍內兩個相同的查詢卻返回了不同資料。這是由於查詢時系統中其他事務修改的提交而引起的。
事務1:查詢一條記錄
————–>事務2:更新事務1查詢的記錄
————–>事務2:呼叫commit進行提交
事務1:再次查詢上次的記錄
*此時事務1對同一資料查詢了兩次,可得到的內容不同,稱為不可重複讀
幻讀(phantom read)
幻讀,是指當事務不是獨立執行時

發生的一種現象,例如第一個事務對一個表中的資料進行了修改,這種修改涉及到表中的全部資料行。同時,第二個事務也修改這個表中的資料,這種修改是向表中插入一行新資料。那麼,以後就會發生操作第一個事務的使用者發現表中還有沒有修改的資料行,就好象發生了幻覺一樣.