Java事務解析(事務的基本操做+隔離的等級+事務的四大特性+事務的概念)

Java事務解析(事務的基本操做+隔離的等級+事務的四大特性+事務的概念)

什麼是事務?

若是一個包含多個步驟的業務操做,這些操做被事務管理,那麼這些操做要麼同時成功要麼同時失敗java

事務的四大特性(必須記住):
持久性:當事務回滾或者提交以後,數據庫會持久化數據
一致性:事務操做先後,數據的總量不變
原子性:是不可分割的最小單位,不可分割,要麼同時成功要麼同時失敗,不可分割
隔離性:各個事務之間相互獨立mysql

事務的基本操做:

開啓事務:start transaction
回滾事務:Roolback
提交:commit;
事務提交的兩種方式:
自動提交:
mysql中事務是默認自動提交的
好比咱們執行一條DML(Data Manipulation Language),他會自動提交數據,將數據持久化到數據庫中
手動提交:
Oracle數據庫默認是手動提交的,
須要開啓事務再手動提交sql

查看事務提交的方式:
在這裏插入圖片描述能夠看到mysql的默認提交方式是自動提交,-- 1 表明自動提交 0 表明手動提交數據庫

修改事務的提交方式:

set @@autocommit安全

在這裏插入圖片描述能夠看到事務的提交方式被修改成手動提交blog

事務的隔離等級:

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兩次讀取的餘額發生不一致。ip

髒讀:
A事務讀取B事務還沒有提交的更改數據,並在這個數據的基礎上進行操做,這時候若是事務B回滾,那麼A事務讀到的數據是不被認可的。例如常見的取款事務和轉帳事務:
好比你去隔壁老王那借錢,你在他家的的時候看到他給你轉的錢到帳了,而後你就給他打了欠條,可是在你出了門,去銀行取錢的時候,發現從老王 那借的錢人間蒸發了,由於老王使用了事務回滾,迷惑了你一番
在這裏插入圖片描述it

在這裏插入圖片描述
在這裏插入圖片描述

幻讀:
A事務讀取B事務提交的新增數據,會引起幻讀問題。幻讀通常發生在計算統計數據的事務中,例如銀行系統在同一個事務中兩次統計存款帳戶的總金額,在兩次統計中,恰好新增了一個存款帳戶,存入了100,這時候兩次統計的總金額不一致。

在這裏插入圖片描述 以上就是java事務的一些基礎知識,若有錯誤還請各位批評指正,喜歡個人文章能夠關注或者收藏

相關文章
相關標籤/搜索