JDBC事務 隔離級別 介紹 與理解

事務隔離級別
事務是用戶定義的一個數據庫操作系列,這些操作要麼全做,要麼全不做,是一個不可分割的工作單位。
定義事務的語句
Begin transaction;
Commit;
Roll back;

事務的Atomicity Consistent Isolation Durability
Atomicity:原子性 一個操作 要麼 不做 要麼 全做
Consistent:一致性 使得數據庫從一個狀態轉移到另一個狀態,當數據庫只包含成功事務的提交時,就說數據庫處於一致性狀態。轉錢的 例子 一個減少,另一個未增加。
Isolation隔離性:一個事務的執行不能被另一個事務打擾。
Durability 持久性:一個事務的提交 對數據庫的改變是持久性的。

當多個用戶併發的存取數據庫時就會產生多個事務同時操作同一數據的情況,這時就需要併發控制。
數據不一致的問題 主要包括一下三點:
1、  丟失修改
比如買票系統T1讀取票數16 T2同樣讀取 16.然後買票1,T1修改後將15 寫回,這時T2同樣會將15寫回,這樣買2張票就只減少1.丟失了修改
2、  《1》不可重複讀non-repeatable read
T1事務Read(A)=50 Read(B) = 100;
T2 事務Read(B) = 100 B = 2*B Write(B) = 200;
這時候 事務T1再讀到的就是修改後的數據
《2》幻讀
    當T1按照某一規則讀取數據後,由於某些原因,T2導致讀取的部分記錄刪除了,那麼你T1再讀的時候,就會發現有些記錄什神祕的消失。
或者你T1按照某一條件讀取到一些記錄,T2增加一些記錄後 ,你會發現T1按照相同的條件會產生更多的記錄。
3、  髒讀
T1讀數據後修改數據並寫入磁盤,T2讀取修改過的數據,而T1由於異常rollback,數據恢復到原來的值,這樣T2事務就讀取到了髒的數據。

併發操作破壞了事務的隔離性Isolation



髒讀是讀取了未提交的數據,而不可重複讀 是讀取了已經提交的數據
那麼 現在來思考一下怎麼避免 這種情況的 發生?
JDBC中設置了5個常量來描述事務隔離界別:
Transaction_Read_uncommitted:可能 發生髒讀,不可重複讀 和幻讀
Transaction_Read_commmitted:不發生髒讀,但是可能會發生不可重複讀,和幻讀
Transaction_Reapeatable_read:不發生 髒 讀 和不可重複讀 但是 可能發生幻讀
Transaction_serializable 禁止髒讀 幻讀 和不可重複讀

還有一個 不支持事務的常量:Transaction_None

發佈了101 篇原創文章 · 獲贊 11 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章