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事務的一些基礎知識,如有錯誤還請各位批評指正,喜歡我的文章可以關注或者收藏


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM