事務的隔離級別

2021-10-05 09:45:25 字數 1228 閱讀 7379

事務的隔離級別

髒讀,不可重複度,幻讀

髒讀 :乙個事務讀取到了另乙個事務未提交的資料操作結果,而改事務回滾,會導致讀到是資料在資料庫中不存在。

不可重複讀 :事務 t1 讀取某一資料後,事務 t2 對其做了修改,當事務 t1 再次讀該資料時得到與前一次不同的 值。這樣就發生了在乙個事務內兩次讀到的資料是不一樣的,因此稱為是不可重複讀。

幻讀 :事務在操作過程中進行兩次查詢,第二次查詢的結果包含了第一次查詢中未出現的資料或者缺少了第一次查 詢**現的資料(並不要求兩次查詢的 sql 語句相同)。這是因為在兩次查詢過程中有另外乙個事務插入資料造 成的

讀未提交,造成髒讀(read uncommitted)

乙個事務中的讀操作可能讀到另乙個事務中未提交修改的資料,如果事務發生回滾就可能造成錯誤。

為了避免髒讀,在寫操作時加鎖,使讀寫分離,保證讀資料的時候,資料不被修改,寫資料的時候,資料不被讀取。從而保證寫的同時不能被另個事務寫和讀。

讀已提交(read committed)

我們加了寫鎖,就可以保證不出現髒讀,也就是保證讀的都是提交之後的資料,但是會造成不可重讀,即讀的時候不加鎖,乙個讀的事務過程中,如果讀取資料兩次,在兩次之間有寫事務修改了資料,將會導致兩次讀取的結果不一致。這就是不可重複讀。

可重複讀(repeatable read)

解決不可重複讀問題,乙個事務中如果有多次讀取操作,讀取結果需要一致。 這就牽涉到事務中是否加讀鎖,並且讀操作加鎖後是否在事務commit之前持有鎖的問題,如果不加讀鎖,必然出現不可重複讀,如果加鎖讀完立即釋放,不持有,那麼就可能在其他事務中被修改,若其他事務已經執行完成,此時該事務中再次讀取就會出現不可重複讀,

可序列話(serializable)

解決幻讀問題,在同乙個事務中,同乙個查詢多次返回的結果不一致。事務a新增了一條記錄,事務b在事務a提交前後各執行了一次查詢操作,發現後一次比前一次多了一條記錄。幻讀是由於併發事務增加或刪除記錄導致的,這個不能像不可重複讀通過記錄加鎖解決,因為對於新增的記錄根本無法加鎖。需要將事務序列化,才能避免幻讀。

事務的隔離級別舉例 事務的隔離級別

乙個事務是乙個完整的業務邏輯單元,不能再分,要麼全部執行成功,要麼全部失敗。比如 a給b轉賬100元,a的銀行卡就會少100元,b的銀行卡就會多100元,整個過程要麼全部執行成功,要麼全部失敗。a 原子性。事務是最小的業務邏輯單元。b 一致性。乙個事務必須保證多條dml語句同時成功或失敗。c 隔離性...

事務的隔離級別舉例 JDBC 事務隔離級別

本文總結了 jdbc 事務隔離級別。事務隔離級別定義了在乙個事務中,哪些資料是對當前執行的語句 可見 的。在併發訪問資料庫時,事務隔離級別定義了多個事務之間對於同個目標資料來源訪問時的可交叉程度。可交叉程度可分為以下幾類。可交叉程度 dirty reads 髒讀 當乙個事務能看見另外乙個事務未提交的...

事務的隔離級別舉例 JDBC事務隔離級別

一組要麼同時執行成功,要麼同時執行失敗的sql語句。是資料庫操作的乙個執行單元。斷開與資料庫的連線 表示乙個事務內的所有操作是乙個整體,要麼全部成功,要麼全部失敗 表示乙個事務內有乙個操作失敗時,所有的更改過的資料都必須回滾到修改前狀態 事務檢視資料時資料所處的狀態,要麼是另一併發事務修改它之前的狀...