事務的隔離級別

2021-07-31 23:41:17 字數 814 閱讀 2382

在sql標準中定義了四種隔離級別,每一種級別都規定了乙個事務中所做的修改,哪些在事務內和事務間是可見的,哪些是不可見的。較低階別的隔離通常可以執行更高的併發,系統的開銷也更低。

1,read uncommitted(未提交讀)

在未提交讀級別,事務中的修改,即使沒有提交,對其他事務也都是可見的。事務可以讀取未提交的資料,這也是被稱為髒讀。這個級別會導致很多問題,從效能上來說,未提交讀不會比其他級別好太多,但卻缺乏其他級別的好多好處,除非真的有非常必要的理由,在實際應用中一般很少使用。

2,read committed(提交讀)

大多數資料庫系統的預設隔離級別都是提交讀。提交讀滿足前面提到的隔離性的簡單定義:乙個事務開始時,只能看見已經提交的事務所做的修改。換句話說,乙個事務從開始直到提交之前,所做的任何修改對其他事務都是不可見的。這個級別有時候也叫做不可重複讀,因為兩次執行同樣的查詢,可能會得到不一樣的結果。

3,repeatable read(可重複讀)

可重複讀解決了髒讀的問題。該級別保證了同乙個事務中多次讀取同樣記錄的結果是一致的。但是理論上,可重讀隔離級別還是無法解決另外乙個幻讀的問題。所謂幻讀,指的是當某個事務在讀取某個範圍內的記錄時,另外乙個事務又在該範圍內插入了新紀錄,當之前的事務再次讀取該範圍的記錄時,會出現幻行。可重複讀是mysql的預設事務隔離級別。

4,serializable(可序列化)

可序列化是最高的隔離級別。它通常強制事務序列執行,避免了前面說的幻讀問題。簡單來說,可序列化會在讀取的每一行資料上都加鎖,所以可能導致大量的超時和鎖爭用的問題。實際應用中也很少用這個隔離級別,只有在非常需要確保資料的一致性而且可以接受沒有併發的情況下,才考慮採用該級別。

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

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

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

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

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

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