1. 程式人生 > >事務分類與特性

事務分類與特性

fault serial efi 其他 一行 可靠 java ee 應用程序 jta事務

事務可從多種層面進行分類,數據庫角度、java角度、編程角度:

數據庫角度

根據數據源的數量分為本地事務和全局事務

本地事務:普通事務,獨立的一個數據庫,保證在該數據庫上操作的ACID。

分布式事務:涉及兩個或多個數據庫源的事務,即跨越多臺同類或異類數據庫的事務(由每臺數據庫的本地事務組成的),分布式事務旨在保證這些本地事務的所有操作的ACID,使事務可以跨越多臺數據庫;

java角度

根據規範分為JDBC事務和JTA事務

JDBC事務:普通事務,即數據庫事務中的本地事務,通過connection對象控制管理。

JTA事務:JTA指Java事務API(Java Transaction API),是Java EE數據庫事務規範

, JTA只提供了事務管理接口,由應用程序服務器廠商(如WebSphere Application Server)提供實現,JTA事務比JDBC更強大,支持分布式事務(當然也支持本地事務)。

編程角度按

根據是否通過編程分為聲明式事務和編程式事務

聲明式事務:通過XML配置或者註解實現,更為簡單

編程式事務:通過編程代碼在業務邏輯時需要時自行實現,粒度更小。

----------------------------------------------------------------------------------

接下來從Spring層面上,讓我們總結一下事務的隔離級別和傳播行為。

隔離級別

有5大隔離級別,這是在TransactionDefinition接口中定義的。

1、ISOLATION_DEFAULT:

用底層數據庫的默認隔離級別,即數據庫管理員設置成什麽就是什麽

2、ISOLATION_READ_UNCOMMITTED(未提交可讀):

最低隔離級別、事務未提交前,就可被其他事務讀取(會出現幻讀、臟讀、不可重復讀)

3、ISOLATION_READ_COMMITTED(提交可讀):

一個事務提交後才能被其他事務讀取到(會造成幻讀、不可重復讀)、sql server的默認級別

4、ISOLATION_REPEATABLE_READ(可重復讀):

可重復讀,保證多次讀取同一個數據時,其值都和事務開始時候的內容是一致,禁止讀取到別的事務未提交的數據(該隔離基本可防止臟讀,不可重復讀(重點在修改),但會出現幻讀(重點在增加與刪除))(MySql默認級別,更改可通過set

transaction isolation level 級別)

5、ISOLATION_SERIALIZABLE(序列化):

代價最高最可靠的隔離級別(該隔離級別能防止臟讀、不可重復讀、幻讀)

默認為isolation_default(底層數據庫默認級別),其他四個隔離級別跟數據庫隔離級別一致。

備註:

幻讀:同樣的事務操作過程中,不同時間段多次(不同事務)讀取同一數據,讀取到的內容不一致(一般是行數變多或變少)

不可重復讀:同一事務中,多次讀取內容不一致(一般行數不變,而內容變了)。

丟失更新:兩個事務同時更新一行數據,最後一個事務的更新會覆蓋掉第一個事務的更新,從而導致第一個事務更新的數據丟失,這是由於沒有加鎖造成的;

臟讀:一個事務讀取到另外一個未提及事務的內容,即為臟讀。

傳播行為

可見:https://www.cnblogs.com/yanze/p/10249708.html



事務分類與特性