事務的隔離級別舉例 事務,事務隔離級別,傳播行為

2021-10-14 12:31:27 字數 1445 閱讀 7171

什麼是事務:事務是訪問資料庫的乙個操作序列,資料庫應用系統通過事務集來完成對資料庫的訪問。事務的正確執行使得資料庫從一種狀態轉換為另一種狀態,事務須服從acid原則

原子性:事務要麼全部被執行,要麼全部不執行。成功則資料庫狀態發生變化,失敗則不會發生狀態轉換

一致性:使資料庫從一種正確狀態轉換成另外一種正確狀態

隔離性:在事務正確提交之前,它可能的結果不應該顯示給其他事務

永續性:事務正確提交之後,其結果將永遠儲存在資料庫之中

事務的作用:它保證了使用者的每一次操作都是可靠的,即便出現了異常的訪問情況,也不至於破壞後台資料的完整性

併發下事務會產生的問題:

1、髒讀:事務a讀到了事務b還沒有提交的資料2、不可重複讀:在乙個事務裡面讀取了兩次某個資料,讀出來的資料不一致3、幻讀:在乙個事務裡面的操作中發現了未被操作的資料,幻讀出現的前提是併發的事務中有事務發生了插入、刪除操作。

事務隔離級別:是為了解決上述問題而產生的,事務隔離級別越高,在併發下會產生的問題就越少,但同時付出的效能消耗也將越大,因此很多時候必須在併發性和效能之間做乙個權衡

1.default預設隔離級別2、read_uncommitted讀未提交,能夠讀取到沒有被提交的資料,髒讀、不可重複讀、幻讀都解決不了3.read_commited讀已提交,能夠讀到那些已經提交的資料,防止髒讀,無法限制不可重複讀和幻讀4.repeatable_read重複讀取,在資料讀出來之後加鎖,讀取了一條資料,這個事務不結束,別的事務就不可以改這條記錄,解決了髒讀、不可重複讀,但是幻讀無法解決5.serlalizable序列化,最高的事務隔離級別,不管多少事務,挨個執行完乙個事務的所有子事務之後才可以執行另外乙個事務裡面的所有子事務,解決髒讀、不可重複讀和幻讀

事物隔離級別檢視及修改:檢視隔離級別用select @@tx_isolation

修改事務隔離級別用set session transaction isolation level serializable+隔離級別,比如mybatis.getsqlsession()只針對這一次拿到的session有效

修改全域性事務隔離級別set global transaction isolation level serializable+隔離級別,針對此後所有的會話有效,當前已經存在的會話不受影響

事務傳播行為:(常用required和requires-new)

required:支援當前事務,若當前沒有事務,就新建乙個事務

supports:支援當前事務,若當前沒有事務,就以非事務方式執行

mandatory(強制的):支援當前事務,若當前沒有事務,就拋異常

requires-new:新建事務,若當前存在事務,把當前事務掛起

not-supported: 以非事務方式執行操作,若當前存在事務,就把當前事務掛起

never:以非事務方式執行,若當前存在事務,則拋異常

nested(巢狀的):當前存在事務,則在巢狀事務內執行。沒有事務,則進行與required類似的操作

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

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

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

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

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

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