成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試突擊:事務隔離級別和傳播機制有什么區別?

開發 前端
事務隔離級別描述的是縱向事務并發調用時的行為模式,而事務傳播機制描述的是橫向事務傳遞時的行為模式。

事務隔離級別和事務傳播機制都是對事務行為的規范,但二者描述的側重點卻不同。本文這里所說的事務隔離級別和事務傳播機制指的是 Spring 框架中的機制。

1、事務隔離級別

事務隔離級別是對事務 4 大特性中隔離性的具體體現,使用事務隔離級別可以控制并發事務在同時執行時的某種行為。

比如,有兩個事務同時操作同一張表,此時有一個事務修改了這張表的數據,但尚未提交事務,那么在另一個事務中,要不要(或者說能不能)看到其他事務尚未提交的數據呢?

這個問題的答案就要看事務的隔離級別了,不同的事務隔離級別,對應的行為模式也是不一樣的(有些隔離級別可以看到其他事務尚未提交的數據,有些事務隔離級別看不到其他事務尚未提交的數據),這就是事務隔離級別的作用。

Sping 中的事務隔離級別有 5 種,它們分別是:

  1. DEFAULT:Spring 中默認的事務隔離級別,以連接的數據庫的事務隔離級別為準。
  2. READ_UNCOMMITTED:讀未提交,也叫未提交讀,該隔離級別的事務可以看到其他事務中未提交的數據。該隔離級別因為可以讀取到其他事務中未提交的數據,而未提交的數據可能會發生回滾,因此我們把該級別讀取到的數據稱之為臟數據,把這個問題稱之為臟讀。
  3. READ_COMMITTED:讀已提交,也叫提交讀,該隔離級別的事務能讀取到已經提交事務的數據,因此它不會有臟讀問題。但由于在事務的執行中可以讀取到其他事務提交的結果,所以在不同時間的相同 SQL 查詢中,可能會得到不同的結果,這種現象叫做不可重復讀。
  4. REPEATABLE_READ:可重復讀,它能確保同一事務多次查詢的結果一致。但也會有新的問題,比如此級別的事務正在執行時,另一個事務成功的插入了某條數據,但因為它每次查詢的結果都是一樣的,所以會導致查詢不到這條數據,自己重復插入時又失敗(因為唯一約束的原因)。明明在事務中查詢不到這條信息,但自己就是插入不進去,這就叫幻讀 (Phantom Read)。
  5. SERIALIZABLE:串行化,最高的事務隔離級別,它會強制事務排序,使之不會發生沖突,從而解決了臟讀、不可重復讀和幻讀問題,但因為執行效率低,所以真正使用的場景并不多。

所以,相比于 MySQL 的事務隔離級別,Spring 中多了一種 DEFAULT 的事務隔離級別。

事務隔離級別與問題的對應關系如下:

  • 臟讀:一個事務讀取到了另一個事務修改的數據之后,后一個事務又進行了回滾操作,從而導致第一個事務讀取的數據是錯誤的。
  • 不可重復讀:一個事務兩次查詢得到的結果不同,因為在兩次查詢中間,有另一個事務把數據修改了。
  • 幻讀:一個事務兩次查詢中得到的結果集不同,因為在兩次查詢中另一個事務有新增了一部分數據。

Spring 中,事務隔離級別可以通過 @Transactional(isolation = Isolation.DEFAULT) 來設置。

2、事務傳播機制

Spring 事務傳播機制是指,包含多個事務的方法在相互調用時,事務是如何在這些方法間傳播的。

Spring 事務傳播機制可使用 @Transactional(propagation=Propagation.REQUIRED) 來設置,Spring 事務傳播機制的級別包含以下 7 種:

  1. Propagation.REQUIRED:默認的事務傳播級別,它表示如果當前存在事務,則加入該事務;如果當前沒有事務,則創建一個新的事務。
  2. Propagation.SUPPORTS:如果當前存在事務,則加入該事務;如果當前沒有事務,則以非事務的方式繼續運行。
  3. Propagation.MANDATORY:(mandatory:強制性)如果當前存在事務,則加入該事務;如果當前沒有事務,則拋出異常。
  4. Propagation.REQUIRES_NEW:表示創建一個新的事務,如果當前存在事務,則把當前事務掛起。也就是說不管外部方法是否開啟事務,Propagation.REQUIRES_NEW 修飾的內部方法會新開啟自己的事務,且開啟的事務相互獨立,互不干擾。
  5. Propagation.NOT_SUPPORTED:以非事務方式運行,如果當前存在事務,則把當前事務掛起。
  6. Propagation.NEVER:以非事務方式運行,如果當前存在事務,則拋出異常。
  7. Propagation.NESTED:如果當前存在事務,則創建一個事務作為當前事務的嵌套事務來運行;如果當前沒有事務,則該取值等價于PROPAGATION_REQUIRED。

以上 7 種傳播機制,可分為以下 3 類:

總結

從上述的介紹中可以看出,事務隔離級別描述的是多個事務同時執行時的某種行為,它們的調用流程如下:

而事務傳播機制是描述,多個包含了事務的方法在相互調用時事務的傳播行為,它們的調用流程如下:

所以事務隔離級別描述的是縱向事務并發調用時的行為模式,而事務傳播機制描述的是橫向事務傳遞時的行為模式。

責任編輯:姜華 來源: 今日頭條
相關推薦

2022-09-19 06:16:23

事務隔離級別Spring

2022-08-22 07:06:32

MyBatisSQL占位符

2022-08-03 07:04:56

GETHTTPPOST

2022-04-24 07:59:53

synchronizJVMAPI

2022-08-10 07:06:57

IoCDISpring

2022-02-08 07:02:32

進程線程操作系統

2022-08-15 07:06:50

Propertiesyml配置

2023-03-26 21:51:42

2022-04-26 08:02:00

locktryLocklockInterr

2022-06-29 11:01:05

MySQL事務隔離級別

2021-09-02 18:39:01

Spring隔離級別

2022-05-09 07:37:04

Java非公平鎖公平鎖

2022-09-27 21:14:54

Spring事務傳播機制

2022-03-16 07:33:40

守護線程用戶線程語言

2022-08-29 07:05:02

JSRJava語言

2022-01-11 06:53:23

面試重寫重載

2022-07-18 07:11:35

請求轉發請求重定數據共享

2021-01-18 11:49:26

面試事務隔離

2022-10-08 00:24:40

嵌套事務加入事務事務

2010-10-19 13:52:28

SQL Server事
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久不射电影网 | 国产亚洲精品成人av久久ww | 成人午夜影院 | 一级一级一级毛片 | 亚洲九九精品 | 男女视频在线观看网站 | 欧美日产国产成人免费图片 | 欧美精品电影一区 | 中文字幕一区二区三区四区 | 欧美日韩一区在线播放 | 在线一区视频 | 黑人成人网 | 国产免费一级一级 | 伊人久久麻豆 | 久久国产一区二区三区 | 国产欧美在线视频 | 成人在线观看免费 | 精品日韩 | 91深夜福利视频 | 日韩中文在线视频 | 麻豆一区二区三区精品视频 | 久久久久久成人 | 国产h视频 | 国产羞羞视频在线观看 | 亚洲成人av在线 | 999久久久| www国产精 | 一级久久久久久 | 精彩视频一区二区三区 | 在线欧美视频 | 一区二区三区免费在线观看 | 伦理午夜电影免费观看 | 亚洲va欧美va天堂v国产综合 | 久草在线在线精品观看 | 男人天堂免费在线 | 欧美日韩高清在线一区 | 国产中文字幕在线观看 | 亚洲人成在线观看 | 欧美一极视频 | 日韩视频免费 | 一级黄色淫片 |