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

2021-10-14 12:31:27 字數 1071 閱讀 8498

本文總結了 jdbc 事務隔離級別。

事務隔離級別定義了在乙個事務中,哪些資料是對當前執行的語句「可見」的。在併發訪問資料庫時,事務隔離級別定義了多個事務之間對於同個目標資料來源訪問時的可交叉程度。

可交叉程度可分為以下幾類。

可交叉程度

dirty reads(髒讀)

當乙個事務能看見另外乙個事務未提交的資料時,就稱為髒讀,換言之,乙個事務修改資料後再未提交之前,就能被其它事務看見。如果這個事務被回滾了而不是提交了,那麼其它事務看到的資料則是不正確的,是「髒」的。

nonrepeatable reads(不可重複讀)

假設事務 a 讀取了一行資料,接下來事務 b 改變了這行資料,之後事務 a 又再一次讀取這行資料,這時候事務 a 就取到了兩個不同的結果。

phantom reads(幻讀)

假設事務 a 通過乙個 where 條件讀取到了乙個結果集,事務 b 這時插入了一條符合事務 a 的 where 條件的資料,之後事務 a 通過同樣的 where 條件再次進行查詢時,發現了多出來一條資料。

事務隔離級別

jdbc 規範增加了 transaction_none 隔離級別,來滿足了 sql:2003 定義的 4 種事務隔離級別。隔離級別從最寬鬆到最嚴格,排序如下所示:

transaction_none

這意味著當前的 jdbc 驅動不支援事務,也意味著這個驅動不符合 jdbc 規範。

transaction_read_uncommitted

允許事務看到其它事務修改了但未提交的資料,這意味著有可能是髒讀、不可重複讀或者幻讀。

transaction_read_committed

乙個事務在未提交之前,所做的修改不會被其它事務所看見。這能避免髒讀,但避免不了不可重複讀和幻讀。

transaction_repeatable_read

避免了髒讀和不可重複讀,但幻讀依然是有可能發生的。

transaction_serializable

避免了髒讀、不可重複讀以及幻讀。

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

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

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

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

JDBC事務隔離級別

如果dbms支援事務處理,它必須有某種途徑來管理兩個事務同時對乙個資料庫進行操作時可能發生的衝突。使用者可指定事務隔離級別,以指明dbms應該花多大精力來解決潛在衝突。例如,當事務更改了某個值而第二個事務卻在該更改被提交或還原前讀取該值時該怎麼辦。假設第乙個事務被還原後,第二個事務所讀取的更改值將是...