Spring中的事務(wù)隔離級別的介紹
spring事務(wù):
什么是事務(wù):
事務(wù)邏輯上的一組操作,組成這組操作的各個邏輯單元,要么一起成功,要么一起失敗.
事務(wù)特性(4種):
- 原子性 (atomicity):強(qiáng)調(diào)事務(wù)的不可分割.
- 一致性 (consistency):事務(wù)的執(zhí)行的前后數(shù)據(jù)的完整性保持一致.
- 隔離性 (isolation):一個事務(wù)執(zhí)行的過程中,不應(yīng)該受到其他事務(wù)的干擾
- 持久性(durability) :事務(wù)一旦結(jié)束,數(shù)據(jù)就持久到數(shù)據(jù)庫
解決讀問題: 設(shè)置事務(wù)隔離級別(5種)
- DEFAULT 這是一個PlatfromTransactionManager默認(rèn)的隔離級別,使用數(shù)據(jù)庫默認(rèn)的事務(wù)隔離級別.
- 未提交讀(read uncommited) :臟讀,不可重復(fù)讀,虛讀都有可能發(fā)生
- 已提交讀 (read commited):避免臟讀。但是不可重復(fù)讀和虛讀有可能發(fā)生
- 可重復(fù)讀 (repeatable read) :避免臟讀和不可重復(fù)讀.但是虛讀有可能發(fā)生.
- 串行化的 (serializable) :避免以上所有讀問題.
Mysql 默認(rèn):可重復(fù)讀
Oracle 默認(rèn):讀已提交
事務(wù)隔離級別定義一個事務(wù)可能受其他事務(wù)并發(fā)活動的影響程度。另一個考慮事務(wù)隔離級別的角度,是把它想象為事務(wù)對于它處理的數(shù)據(jù)的自私程度。
事務(wù)的隔離要解決的問題有3個:
- 1,臟讀,即一個事務(wù)讀到另一個事務(wù)還沒有提交的數(shù)據(jù)。如果另一個事務(wù)失敗了,回滾了,那么第一個事務(wù)讀到的數(shù)據(jù)就是無效的數(shù)據(jù)。這就是臟讀。
- 2,不可重復(fù)讀,不可重復(fù)讀發(fā)生在一個事務(wù)里兩次查詢同一個數(shù)據(jù),發(fā)現(xiàn)查詢結(jié)果不一樣。這是因?yàn)樵谠撌聞?wù)的兩次查詢之間,有另一個事務(wù)更新了該數(shù)據(jù)。
- 3,幻讀,幻讀和不可重復(fù)讀比較類似。當(dāng)一個事務(wù)t1,第一次查詢了一些行,第二次又查詢了一些行,發(fā)現(xiàn)兩次查詢出來的行個數(shù)不一樣,或者多了一些行,或者少了一些行,好像出現(xiàn)了幻覺一樣。這是因?yàn)樵趦纱尾樵冎g,有另一事務(wù)更新了符合第一個事務(wù)查詢條件的行。
對比不可重復(fù)讀和幻讀,就可以很好的理解它們的區(qū)別。不可重復(fù)讀針對的是一行或者說一個數(shù)據(jù),而幻讀針對的是多行數(shù)據(jù)。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
Java C++ leetcode執(zhí)行一次字符串交換能否使兩個字符串相等
這篇文章主要為大家介紹了Java C++ leetcode1790執(zhí)行一次字符串交換能否使兩個字符串相等,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10詳解java實(shí)現(xiàn)簡單掃碼登錄功能(模仿微信網(wǎng)頁版掃碼)
這篇文章主要介紹了java實(shí)現(xiàn)簡單掃碼登錄功能(模仿微信網(wǎng)頁版掃碼),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05Spring boot實(shí)現(xiàn)文件上傳實(shí)例(多文件上傳)
本篇文章主要介紹了Spring boot實(shí)現(xiàn)文件上傳實(shí)例(多文件上傳),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05Springboot整合camunda+mysql的集成流程分析
本文介紹基于mysql數(shù)據(jù)庫,如何實(shí)現(xiàn)camunda與springboot的集成,如何實(shí)現(xiàn)基于springboot運(yùn)行camunda開源流程引擎,本文分步驟圖文相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-06-06IDEA使用SequenceDiagram插件繪制時(shí)序圖的方法
這篇文章主要介紹了IDEA使用SequenceDiagram插件繪制時(shí)序圖的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09break和continue的作用和區(qū)別解析(案例分析)
break和continue都是用來控制循環(huán)結(jié)構(gòu)的,主要作用是停止循環(huán),這篇文章主要介紹了break和continue的作用和區(qū)別,需要的朋友可以參考下2023-03-03詳解Spring Boot中使用Flyway來管理數(shù)據(jù)庫版本
這篇文章主要介紹了詳解Spring Boot中使用Flyway來管理數(shù)據(jù)庫版本,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01