資料庫系統有四個隔離級別,分別為
未提交讀、
已提交讀、可重複讀、序列化
大多數資料庫的預設級別就是read committed,比如sql server , oracle。mysql的預設隔離級別就是repeatable read。
read uncommitted(未提交讀)
事務a執行的操作未提交,但是事務b還是能看到修改,這時會產生髒讀的情況。
read committed(提交讀)
事務a先是讀取了資料,這時事務b更改了同一資料,並已提交,這時事務a再次讀取這個資料時就會發現兩次資料不一致,這就產生不可重複讀的現象。
repeatable read(可重複讀)
當事務a讀取記錄時,會對此記錄新增乙個共享鎖,即事務b不能在事務a結束前對記錄進行修改。
可能產生的問題:當執行範圍查詢時,可能會產生幻讀。如事務a先查詢乙個消費總量,接著事務b增加一條消費記錄,這時事務a再次查詢消費總量時,就會發現兩次查詢不一致
serializable(序列化)
新增範圍鎖(比如表鎖,頁鎖等、),直到transaction a結束。以此阻止其它transaction b對此範圍內的insert,update等操作。
幻讀,髒讀,不可重複讀等問題都不會發生。
髒讀不可重複讀 幻讀
read uncommitted √
√ √read committed ×
√ √repeatable read ×
× √serializable ×
× ×
事務的隔離級別舉例 事務的隔離級別
乙個事務是乙個完整的業務邏輯單元,不能再分,要麼全部執行成功,要麼全部失敗。比如 a給b轉賬100元,a的銀行卡就會少100元,b的銀行卡就會多100元,整個過程要麼全部執行成功,要麼全部失敗。a 原子性。事務是最小的業務邏輯單元。b 一致性。乙個事務必須保證多條dml語句同時成功或失敗。c 隔離性...
事務的隔離級別舉例 JDBC 事務隔離級別
本文總結了 jdbc 事務隔離級別。事務隔離級別定義了在乙個事務中,哪些資料是對當前執行的語句 可見 的。在併發訪問資料庫時,事務隔離級別定義了多個事務之間對於同個目標資料來源訪問時的可交叉程度。可交叉程度可分為以下幾類。可交叉程度 dirty reads 髒讀 當乙個事務能看見另外乙個事務未提交的...
事務的隔離級別舉例 JDBC事務隔離級別
一組要麼同時執行成功,要麼同時執行失敗的sql語句。是資料庫操作的乙個執行單元。斷開與資料庫的連線 表示乙個事務內的所有操作是乙個整體,要麼全部成功,要麼全部失敗 表示乙個事務內有乙個操作失敗時,所有的更改過的資料都必須回滾到修改前狀態 事務檢視資料時資料所處的狀態,要麼是另一併發事務修改它之前的狀...