一、事務是什麼?html
二、事務的目的是什麼?spring
Spring的事務管理底層基於數據庫事務,因此在學習Spring事務以前,咱們須要先學習數據庫事務。sql
事務是數據庫管理系統執行過程當中的一個邏輯單位,由一個有限的數據庫操做序列構成。(來自維基百科)數據庫
簡單翻譯就是將數據資源進行訪問的分步操做組合成一個總體操做,這一總體執行單元就是事務。編程
事務的目的是保證數據的一致性。併發
要保證分步操做組合成一個總體操做時總體成功或總體失敗(同生共死)。就須要有嚴格的定義。ide
事務的4種特性(ACID):原子性(Atomicity)、一致性(Consistency)、隔離性(IsoLation)、持久性(Durability)。post
出現髒讀的緣由:"select"操做沒有限制性能
出現不可重複讀的緣由:「update」操做沒有限制學習
出現幻讀的緣由:「insert」和「delete」操做沒有限制
快照讀基於MVCC和 undo log實現,適用於簡單的select語句。MVCC 併發版本控制,是靠 ReadView (事務視圖) 來實現的。
讀已提交:事務中每一條SQL都會生成一個ReadView。在執行查詢操做時都會讀取最新ReadView中的值。
可重複讀:事務開始時會生成一個ReadView。事務中的多條SQL都會讀取到同一個ReadView。在多條SQL查詢時也會讀取同一個ReadView中的值。
Spring爲事務管理提供統一的編程模板,在高層次創建統一的事務抽象。
用於描述事務的隔離級別、超時時間、是否爲讀取事務以及事務的傳播規則等控制事務的具體屬性。
事務隔離級別
TransactionDefinition中定義了五個表示隔離級別的常量:
(1)TransactionDefinition.ISOLATION_DEFAULT,表示使用數據庫默認隔離界別(Oracle採用讀提交,Mysql默認採用可重複讀)
(2)TransactionDefinition.ISOLATION_READ_UNCOMMITTED,表示讀未提交。
(3)TransactionDefinition.ISOLATION_READ_COMMITTED,表示讀提交。
(4)TransactionDefinition.ISOLATION_REPEATABLE_READ,表示可重複讀。
(5)TransactionDefinition.ISOLATION_SERIALIZABLE,表示串行化。
事務傳播行爲
當某個事務被另外一事務調用時,就須要指定事務傳播。
TransactionDefinition.PROPAGATION_REQUIRED,若是當前存在事務,則加入該事務;若是當前沒有事務,則建立一個新的事務,這是最多見的選擇。
TransactionDefinition.PROPAGATION_SUPPORTS, 若是當前存在事務,則加入該事務;若是當前沒有事務,則以非事務的方式繼續運行。
TransactionDefinition.PROPAGATION_MANDATORY,若是當前存在事務,則加入該事務;若是當前沒有事務,則拋出異常。
超過事務被容許運行的時間,事務在規定時間未完成將自動回滾事務。TransactionDefinition中以秒爲默認單位。
事務只對事務資源進行讀操做,不修改任何數據。若是隻對事務資源數據進行讀取操做,能夠設置爲只讀狀態,以提高運行性能。
用於定義回滾與不會滾的對應異常。默認狀況下事務在運行期遇到特定異常時纔回滾。
用於表示事務的具體運行狀態。事務管理器可以經過該接口獲取事務運行期的狀態信息,也能夠經過該接口間接地回滾事務,相比於在拋出異常時事務回滾更有意義。
事務管理器,提供事務提交、回滾以及根據事務定義信息從事務環境中返回一個已經存在的事務或建立一個新事務。
<!-- 事務管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 數據源 --> <property name="dataSource" ref="dataSource" /> </bean>
[1]https://zh.wikipedia.org/wiki/數據庫事務
[2]https://baijiahao.baidu.com/s?id=1611918898724887602&wfr=spider&for=pc
[3]http://www.javashuo.com/article/p-ebdjhvai-da.html
[4]http://www.javashuo.com/article/p-ubezhkxh-cc.html
[5]《精通Spring4.x 企業應用開發實戰》