1. 程式人生 > >事務特性及髒讀、不可重複讀、幻讀(虛讀)

事務特性及髒讀、不可重複讀、幻讀(虛讀)

事務是指邏輯上的一組操作,這組操作要麼全部成功,要麼全部失敗。

事務的特性(ACID):

原子性(A):事務是一個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。

一致性(C):事務前後資料的完整性必須保持一致。例:A:200,B:200,A、B之間無論怎麼交換,最終都要保證和是400。

隔離性(I):多個使用者併發訪問資料庫時,一個使用者的事務不能被其他使用者的事務所幹擾,多個併發事務之間資料要相互隔離。如果不考慮隔離性,會引發安全問題如下:髒讀不可重複讀幻讀(虛讀)。

髒讀:一個事務讀取了另一個事務改寫但還未提交的資料,如果這些資料被回滾,則讀到的資料是無效的。

不可重複讀:在同一事務中,多次讀取同一資料返回的結果有所不同,讀到了之前的資料後又讀到了其他事務已經提交的更新的資料。

幻讀(虛讀):一個事務讀取了幾行記錄後,另一個事務插入(insert)一些記錄幻讀就發生了。再後來的查詢中,第一個事務就會發現有些原來沒有的記錄。

因此需要設定事務隔離級別(四種)。


如果隔離級別設定成DEFAULT,那麼底層資料庫用什麼,DEFAULT就表示什麼隔離級別。

Mysql預設採用REPEATABLE_READ隔離級別。

Oracle預設採用READ_COMMITTED隔離級別。

永續性(D):一個事務一旦被提交,他對資料庫中資料的改變是永久性的,即使資料庫發生故障也不應該對其有影響。