Spring資料庫事務管理

2021-09-08 20:08:36 字數 1521 閱讀 1083

事務(transaction)是併發控制的基本單位。所謂的事務,它是乙個操作序列,這些操作要麼都執行,要麼都不執行,它是乙個不可分割的工作單位。例如,銀行轉賬工作:從乙個賬號扣款並使另乙個賬號增款,這兩個操作要麼都執行,要麼都不執行,在關聯式資料庫中,乙個事務可以是一條sql語句、一組sql語句或整個程式。 。所以,應該把它們看成乙個事務。事務是資料庫維護資料一致性的單位,在每個事務結束時,都能保持資料一致性 

原子性(atomicity)  乙個事務必須被視為乙個不可分割的最小工作單元,​​​​整個事務中的所有操作,要麼全部成功,要麼全部失敗一致性(consistency) 事務必須保持系統從始至終都處於一致的狀態隔離性(isolation) 指的是兩個事務之間的隔離程度永續性(durability)乙個成功的事務將永久性地改變資料庫的狀態髒讀(dirty-read)允許乙個事務讀取另乙個未提交的資料讀寫提交(read-commit)乙個事務只能讀取另乙個事務已提交的資料可重複讀(repeatable-read)針對"不可重複讀" 的隔離級別,mysql的預設隔離解蔽額序列化(serialization)  事務「序列化順序執行」,也就是乙個乙個排隊執行。不可重複讀  對於乙個表是不能重複讀取的,因為他是乙個變換的值,就是每次讀取的結果都不一致髒讀  讀取了已經無效的資料幻讀  當a事務執行delete/insert 後,b事務在讀取的兩次結果不一樣required(spring預設) 當方法呼叫時,如果不存在當前事務,就建立事務;如果之前的方法有事務,就沿用之前方法的事物supports         當方法呼叫時,如果有事務就用,沒事務就不用事務mandatory  方法必須在事務內執行否在拋異常requires_new  無論是否在當前事務,方法都會在新的事務中執行not_supported 不支援事務,如果不存在當前事務也不會建立事務,如果存在就掛起事務,方法結束恢復事務never 不支援事務,如果存在事務就跑異常nested 巢狀事務 呼叫方法如果出現異常則只回滾自己內部執行的sql,不回滾主方法的sql配置檔案版

註解版

@transactional

@service

public class userserviceimpl implements userservice

深入Spring資料庫事務管理

相關問題 一 transactional的失效問題 1.對於靜態 static 方法和非public方法,註解 transactional是失效的。2.自呼叫,就是乙個類的乙個方法去呼叫自身另外乙個方法的過程。如下 autowired private roledao roledao transact...

資料庫事務管理

一 事務的特性 acid 二 3個問題 幻讀和不可重複讀看起來一樣,但鎖的機制不同,幻讀對應insert和delete 操作,不可重複讀對應update操作 具體說就是不可重複讀鎖定一行資料,是行鎖,幻讀鎖定整個條件區域,是序列鎖。三 樂觀鎖和悲觀所 以上說的鎖,通過資料庫的鎖機制控制,鎖定後其他操...

spring 事務管理與資料庫隔離級別

1遇到問題 spring 事務中儲存了物件後 啟動乙個執行緒獲取物件無效 public void postdispatchdoc dispatchdoc entity catch exception e public void run catch exception e 寫web專案的時候,我們一般...