資料庫_隔離級別
資料庫_隔離級別
1.髒讀 :
髒讀就是指當一個事務正在訪問資料,並且對資料進行了修改,而這種修改還沒有提交到資料庫中,這時,另外一個事務也訪問這個資料,然後使用了這個資料
2.幻讀:
是指當事務不是獨立執行時發生的一種現象,例如第一個事務對一個表中的資料進行了修改,這種修改涉及到表中的全部資料行。
同時,第二個事務也修改這個表中的資料,這種修改是向表中插入一行新資料。那麼,以後就會發生操作第一個事務的使用者發現表中還有沒有修改的資料行,就好象 發生了幻覺一樣。
3、不可重複讀:
是指在一個事務內,多次讀同一資料。在這個事務還沒有結束時,另外一個事務也訪問該同一資料。那麼,在第一個事務中的兩
次讀資料之間,由於第二個事務的修改,那麼第一個事務兩次讀到的的資料可能是不一樣的。這樣就發生了在一個事務內兩次讀到的資料是不一樣的,因此稱為是不 可重複讀。
資料庫提供的四種事務隔離級別
READ UNCOMMTTED(讀未提交資料):允許事務讀取未被其他事物提交的表更,髒讀,不可重複讀,幻讀的問題都會出現
READ COMMITED(讀已提交資料):只允許事務讀取已經被其他事物提交的變更,可以避免髒讀,但不可重複讀和幻讀問題仍 可能出現
REPEATABLE READ(可重複讀):確保事務可以多次從一個欄位中讀取相同的值,在這個事務持續期間,禁止其他事物對這個字 段進行更新,可以避免髒讀和不可重複讀,但幻讀問題仍然存在。
SERIALIZABLE(序列化):確保事務可以從一個表中讀取相同的行 ,在這個事務持續期間,禁止其他事務對該表執行插入,更新 和刪除操作所有併發問題都可以避免,但效能十分低下。
Oracle支援2種隔離級別:
READ COMMITED(讀已提交資料)和SERIALIZABLE(序列化),
Oracle預設的事務隔離級別為READ COMMITED(讀已提交資料)
Mysql支援四種事務隔離級別:
Mysql預設的事務隔離級別為REPEATABLE READ(可重複讀)