偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

面試突擊:事務(wù)隔離級(jí)別和傳播機(jī)制有什么區(qū)別?

開發(fā) 前端
事務(wù)隔離級(jí)別描述的是縱向事務(wù)并發(fā)調(diào)用時(shí)的行為模式,而事務(wù)傳播機(jī)制描述的是橫向事務(wù)傳遞時(shí)的行為模式。

事務(wù)隔離級(jí)別和事務(wù)傳播機(jī)制都是對(duì)事務(wù)行為的規(guī)范,但二者描述的側(cè)重點(diǎn)卻不同。本文這里所說的事務(wù)隔離級(jí)別和事務(wù)傳播機(jī)制指的是 Spring 框架中的機(jī)制。

1、事務(wù)隔離級(jí)別

事務(wù)隔離級(jí)別是對(duì)事務(wù) 4 大特性中隔離性的具體體現(xiàn),使用事務(wù)隔離級(jí)別可以控制并發(fā)事務(wù)在同時(shí)執(zhí)行時(shí)的某種行為。

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

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

Sping 中的事務(wù)隔離級(jí)別有 5 種,它們分別是:

  1. DEFAULT:Spring 中默認(rèn)的事務(wù)隔離級(jí)別,以連接的數(shù)據(jù)庫的事務(wù)隔離級(jí)別為準(zhǔn)。
  2. READ_UNCOMMITTED:讀未提交,也叫未提交讀,該隔離級(jí)別的事務(wù)可以看到其他事務(wù)中未提交的數(shù)據(jù)。該隔離級(jí)別因?yàn)榭梢宰x取到其他事務(wù)中未提交的數(shù)據(jù),而未提交的數(shù)據(jù)可能會(huì)發(fā)生回滾,因此我們把該級(jí)別讀取到的數(shù)據(jù)稱之為臟數(shù)據(jù),把這個(gè)問題稱之為臟讀。
  3. READ_COMMITTED:讀已提交,也叫提交讀,該隔離級(jí)別的事務(wù)能讀取到已經(jīng)提交事務(wù)的數(shù)據(jù),因此它不會(huì)有臟讀問題。但由于在事務(wù)的執(zhí)行中可以讀取到其他事務(wù)提交的結(jié)果,所以在不同時(shí)間的相同 SQL 查詢中,可能會(huì)得到不同的結(jié)果,這種現(xiàn)象叫做不可重復(fù)讀。
  4. REPEATABLE_READ:可重復(fù)讀,它能確保同一事務(wù)多次查詢的結(jié)果一致。但也會(huì)有新的問題,比如此級(jí)別的事務(wù)正在執(zhí)行時(shí),另一個(gè)事務(wù)成功的插入了某條數(shù)據(jù),但因?yàn)樗看尾樵兊慕Y(jié)果都是一樣的,所以會(huì)導(dǎo)致查詢不到這條數(shù)據(jù),自己重復(fù)插入時(shí)又失敗(因?yàn)槲ㄒ患s束的原因)。明明在事務(wù)中查詢不到這條信息,但自己就是插入不進(jìn)去,這就叫幻讀 (Phantom Read)。
  5. SERIALIZABLE:串行化,最高的事務(wù)隔離級(jí)別,它會(huì)強(qiáng)制事務(wù)排序,使之不會(huì)發(fā)生沖突,從而解決了臟讀、不可重復(fù)讀和幻讀問題,但因?yàn)閳?zhí)行效率低,所以真正使用的場景并不多。

所以,相比于 MySQL 的事務(wù)隔離級(jí)別,Spring 中多了一種 DEFAULT 的事務(wù)隔離級(jí)別。

事務(wù)隔離級(jí)別與問題的對(duì)應(yīng)關(guān)系如下:

  • 臟讀:一個(gè)事務(wù)讀取到了另一個(gè)事務(wù)修改的數(shù)據(jù)之后,后一個(gè)事務(wù)又進(jìn)行了回滾操作,從而導(dǎo)致第一個(gè)事務(wù)讀取的數(shù)據(jù)是錯(cuò)誤的。
  • 不可重復(fù)讀:一個(gè)事務(wù)兩次查詢得到的結(jié)果不同,因?yàn)樵趦纱尾樵冎虚g,有另一個(gè)事務(wù)把數(shù)據(jù)修改了。
  • 幻讀:一個(gè)事務(wù)兩次查詢中得到的結(jié)果集不同,因?yàn)樵趦纱尾樵冎辛硪粋€(gè)事務(wù)有新增了一部分?jǐn)?shù)據(jù)。

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

2、事務(wù)傳播機(jī)制

Spring 事務(wù)傳播機(jī)制是指,包含多個(gè)事務(wù)的方法在相互調(diào)用時(shí),事務(wù)是如何在這些方法間傳播的。

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

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

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

總結(jié)

從上述的介紹中可以看出,事務(wù)隔離級(jí)別描述的是多個(gè)事務(wù)同時(shí)執(zhí)行時(shí)的某種行為,它們的調(diào)用流程如下:

而事務(wù)傳播機(jī)制是描述,多個(gè)包含了事務(wù)的方法在相互調(diào)用時(shí)事務(wù)的傳播行為,它們的調(diào)用流程如下:

所以事務(wù)隔離級(jí)別描述的是縱向事務(wù)并發(fā)調(diào)用時(shí)的行為模式,而事務(wù)傳播機(jī)制描述的是橫向事務(wù)傳遞時(shí)的行為模式。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2022-09-19 06:16:23

事務(wù)隔離級(jí)別Spring

2022-08-22 07:06:32

MyBatisSQL占位符

2022-08-03 07:04:56

GETHTTPPOST

2022-08-10 07:06:57

IoCDISpring

2022-04-24 07:59:53

synchronizJVMAPI

2022-02-08 07:02:32

進(jìn)程線程操作系統(tǒng)

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事務(wù)隔離級(jí)別

2021-09-02 18:39:01

Spring隔離級(jí)別

2022-09-27 21:14:54

Spring事務(wù)傳播機(jī)制

2022-05-09 07:37:04

Java非公平鎖公平鎖

2022-03-16 07:33:40

守護(hù)線程用戶線程語言

2022-08-29 07:05:02

JSRJava語言

2022-01-11 06:53:23

面試重寫重載

2022-07-18 07:11:35

請(qǐng)求轉(zhuǎn)發(fā)請(qǐng)求重定數(shù)據(jù)共享

2021-01-18 11:49:26

面試事務(wù)隔離

2025-10-29 07:00:00

FlinkSpark大數(shù)據(jù)

2022-10-08 00:24:40

嵌套事務(wù)加入事務(wù)事務(wù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)