Java事務解析(事務的基本操作+隔離的等級+事務的四大特性+事務的概念) 什麼是事務? 如果一個包含多個步驟的業務操作,這些操作被事務管理,那麼這些操作要麼同時成功要麼同時失敗 事務的四大特性(必須記住): 持久性:當事務回滾或者提交之後,資料庫會持久化數據 一致性:事務操作前後,數據的總量不變 ...
Java事務解析(事務的基本操作+隔離的等級+事務的四大特性+事務的概念)
什麼是事務?
如果一個包含多個步驟的業務操作,這些操作被事務管理,那麼這些操作要麼同時成功要麼同時失敗
事務的四大特性(必須記住):
持久性:當事務回滾或者提交之後,資料庫會持久化數據
一致性:事務操作前後,數據的總量不變
原子性:是不可分割的最小單位,不可分割,要麼同時成功要麼同時失敗,不可分割
隔離性:各個事務之間相互獨立
事務的基本操作:
開啟事務:start transaction
回滾事務:Roolback
提交:commit;
事務提交的兩種方式:
自動提交:
mysql中事務是預設自動提交的
比如我們執行一條DML(Data Manipulation Language),他會自動提交數據,將數據持久化到資料庫中
手動提交:
Oracle資料庫預設是手動提交的,
需要開啟事務再手動提交
查看事務提交的方式:
可以看到mysql的預設提交方式是自動提交,-- 1 代表自動提交 0 代表手動提交
修改事務的提交方式:
set @@autocommit
可以看到事務的提交方式被修改為手動提交
事務的隔離等級:
1
Read uncommitted:讀未提交
產生的問題:臟讀,不可重覆讀,幻讀
2
Read commited:讀已提交
產生問題:不可重覆讀,幻讀
3
Repeatable read 可重覆讀(Mysql預設讀法):
產生的問題:幻讀
4
serialzable:串列化
可以解決所有問題
事務的隔離等級越高,安全等級也越高,但是效率越來越低
資料庫查詢隔離級別:
select @@tx_isolation
設置資料庫的隔離等級:
select global transaction isolation level
什麼是幻讀,臟讀,不可重覆讀
不可重覆讀:
不可重覆讀是指A事務讀取了B事務已經提交的更改數據。假如A在取款事務的過程中,B往該賬戶轉賬100,A兩次讀取的餘額發生不一致。
臟讀:
A事務讀取B事務尚未提交的更改數據,併在這個數據的基礎上進行操作,這時候如果事務B回滾,那麼A事務讀到的數據是不被承認的。例如常見的取款事務和轉賬事務:
比如你去隔壁老王那借錢,你在他家的的時候看到他給你轉的錢到賬了,然後你就給他打了欠條,但是在你出了門,去銀行取錢的時候,發現從老王 那借的錢人間蒸發了,因為老王使用了事務回滾,迷惑了你一番
幻讀:
A事務讀取B事務提交的新增數據,會引發幻讀問題。幻讀一般發生在計算統計數據的事務中,例如銀行系統在同一個事務中兩次統計存款賬戶的總金額,在兩次統計中,剛好新增了一個存款賬戶,存入了100,這時候兩次統計的總金額不一致。
以上就是java事務的一些基礎知識,如有錯誤還請各位批評指正,喜歡我的文章可以關註或者收藏