併發事務帶來的問題
1)髒讀
第乙個事務尚未commit的內容已經被第二個事務讀到
2)不可重複讀
第乙個事務執行更新操作,第二個事務內部在第乙個事務更新前後兩次讀到資料不一樣
3)幻讀
例如:第乙個事務更新所有行,第二個事務新插入一行資料,通常會出現第乙個事務執行完成後仍然會出現「未更新成功的行」
4)第一類丟失更新(回滾丟失)
例如:兩個事務更新同一行,其中乙個回滾導致前乙個更新也丟失
5)第二類丟失更新(覆蓋丟失)
例如:兩個事務更新同一行,後乙個事務更新覆蓋前乙個事務更新的結果
事務的隔離級別
1)read_uncommitted
隔離級別最低,併發效能最好,但是會出現髒讀、不可重複讀、幻讀、丟失更新等問題
2)read_committed
鎖定正在操作的行,這是大多數資料庫預設的隔離級別,如sqlserver、oracle
但是會出現不可重複讀、幻讀等問題
3)repeatable_read
鎖定所操作的所有行,少數資料庫的預設隔離級別是這樣,如mysql innodb
但會出現幻讀問題
4)serializable
隔離級別最高,併發效能最差,鎖表,但可避免所有問題
事務的隔離級別舉例 事務的隔離級別
乙個事務是乙個完整的業務邏輯單元,不能再分,要麼全部執行成功,要麼全部失敗。比如 a給b轉賬100元,a的銀行卡就會少100元,b的銀行卡就會多100元,整個過程要麼全部執行成功,要麼全部失敗。a 原子性。事務是最小的業務邏輯單元。b 一致性。乙個事務必須保證多條dml語句同時成功或失敗。c 隔離性...
事務的隔離級別舉例 JDBC 事務隔離級別
本文總結了 jdbc 事務隔離級別。事務隔離級別定義了在乙個事務中,哪些資料是對當前執行的語句 可見 的。在併發訪問資料庫時,事務隔離級別定義了多個事務之間對於同個目標資料來源訪問時的可交叉程度。可交叉程度可分為以下幾類。可交叉程度 dirty reads 髒讀 當乙個事務能看見另外乙個事務未提交的...
事務的隔離級別舉例 JDBC事務隔離級別
一組要麼同時執行成功,要麼同時執行失敗的sql語句。是資料庫操作的乙個執行單元。斷開與資料庫的連線 表示乙個事務內的所有操作是乙個整體,要麼全部成功,要麼全部失敗 表示乙個事務內有乙個操作失敗時,所有的更改過的資料都必須回滾到修改前狀態 事務檢視資料時資料所處的狀態,要麼是另一併發事務修改它之前的狀...