1. 在需要事務管理的地方加@transactional 註解。@transactional 註解可以被應用於介面定義和介面方法、類定義和類的 public 方法上。
2.@transactional 註解只能應用到 public 可見度的方法上。 如果你在 protected、private 或者 package-visible 的方法上使用 @transactional 註解,它也不會報錯, 但是這個被註解的方法將不會展示已配置的事務設定。
資料庫事物的四大特性:
原子性(atomicity):事務作為乙個整體被執行,包含在其中的對資料庫的操作要麼全部被執行,要麼都不執行。
一致性(consistency):事務應確保資料庫的狀態從乙個一致狀態轉變為另乙個一致狀態。一致狀態的含義是資料庫中的資料應滿足完整性約束。
隔離性(isolation):多個事務併發執行時,乙個事務的執行不應影響其他事務的執行。
永續性(durability):已被提交的事務對資料庫的修改應該永久儲存在資料庫中。
spring事務:
什麼是事務:
事務邏輯上的一組操作,組成這組操作的各個邏輯單元,要麼一起成功,要麼一起失敗.
事務特性(4種):
原子性 (atomicity):強調事務的不可分割.
一致性 (consistency):事務的執行的前後資料的完整性保持一致.
隔離性 (isolation):乙個事務執行的過程中,不應該受到其他事務的干擾
永續性(durability) :事務一旦結束,資料就持久到資料庫
如果不考慮隔離性引發安全性問題:
髒讀 :乙個事務讀到了另乙個事務的未提交的資料
不可重複讀 :乙個事務讀到了另乙個事務已經提交的update 的資料導致多次查詢結果不一致.
虛幻讀 :乙個事務讀到了另乙個事務已經提交的insert 的資料導致多次查詢結果不一致.
解決讀問題: 設定事務隔離級別(5種)
default 這是乙個platfromtransactionmanager預設的隔離級別,使用資料庫預設的事務隔離級別.
未提交讀(read uncommited) :髒讀,不可重複讀,虛讀都有可能發生
讀提交(read commited):避免髒讀。但是不可重複讀和虛讀有可能發生
可重複讀 (repeatable read) :避免髒讀和不可重複讀.但是虛讀有可能發生.
序列化的 (serializable) :避免以上所有讀問題.
mysql 預設:可重複讀
oracle 預設:讀已提交
read uncommited:是最低的事務隔離級別,它允許另外乙個事務可以看到這個事務未提交的資料。
讀未提交,顧名思義,就是乙個事務可以讀取另乙個未提交事務的資料。
read commited:保證乙個事物提交後才能被另外乙個事務讀取。另外乙個事務不能讀取該事物未提交的資料。
讀提交,顧名思義,就是乙個事務要等另乙個事務提交後才能讀取資料。
repeatable read:這種事務隔離級別可以防止髒讀,不可重複讀。但是可能會出現幻象讀。它除了保證乙個事務不能被另外乙個事務讀取未提交的資料之外還避免了以下情況產生(不可重複讀)。
重複讀,就是在開始讀取資料(事務開啟)時,不再允許修改操作
serializable:這是花費最高代價但最可靠的事務隔離級別。事務被處理為順序執行。除了防止髒讀,不可重複讀之外,還避免了幻象讀(避免三種)。
事務的傳播行為
propagion_*** :事務的傳播行為
* 保證同乙個事務中
propagation_required 支援當前事務,如果不存在 就新建乙個(預設)
propagation_supports 支援當前事務,如果不存在,就不使用事務
propagation_mandatory 支援當前事務,如果不存在,丟擲異常
* 保證沒有在同乙個事務中
propagation_requires_new 如果有事務存在,掛起當前事務,建立乙個新的事務
propagation_not_supported 以非事務方式執行,如果有事務存在,掛起當前事務
propagation_never 以非事務方式執行,如果有事務存在,丟擲異常
propagation_nested 如果當前事務存在,則巢狀事務執行
JDBC學習筆記(事務的處理和批量處理SQL語句)
舉個例子 小明向小紅轉賬1000元,在轉賬過程中系統突然中斷,小紅的賬戶未到賬1000元,可小明賬戶已經扣款1000元。資料庫事務就是為了解決類似問題產生,當轉賬發生錯誤時系統會回滾事務,將小明和小紅的資料還原成轉賬前的狀態。connection類裡提供三個方法來支援資料庫的事務操作 開始事務 即不...
mysql 筆記 事務
一 問題讀取 1.髒讀 dirty read 事務1更新了某一條記錄,但未提交 事務2讀取到新的未提交記錄 事務1回滾。2.不可重複讀取 nonrepeatable read 不可重複讀,是指在資料庫訪問中,乙個 事務範圍內兩個相同的查詢卻返回了不同資料。例子 事務1讀取某一條記錄 事務2修改事務1...
mysql筆記 事務
寫日誌為什麼比直接寫磁碟要快?使用事務日誌,儲存引擎在修改表的資料時,只需要修改其記憶體拷貝,再把該修改行為記錄到硬碟上的事務日誌中,而不用每次都將修改的資料本身持久到磁碟。事務日誌採用的是追加的方式,因此寫日誌的操作是磁碟上一小塊區域內的順序i o,而不是隨機i o,所以快很多。事務日誌持久以後,...