日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
面試突擊:Spring有幾種事務(wù)隔離級(jí)別?

Spring 中的事務(wù)隔離級(jí)別和數(shù)據(jù)庫(kù)中的事務(wù)隔離級(jí)別稍有不同,以 MySQL 為例,MySQL 的 InnoDB 引擎中的事務(wù)隔離級(jí)別有 4 種,而 Spring 中卻包含了 5 種事務(wù)隔離級(jí)別。

創(chuàng)新互聯(lián)公司是一家專注于網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站與策劃設(shè)計(jì),高縣網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:高縣等地區(qū)。高縣做網(wǎng)站價(jià)格咨詢:18982081108

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ù)中,要不要(或者說(shuō)能不能)看到其他事務(wù)尚未提交的數(shù)據(jù)呢?

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

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

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

  1. DEFAULT:Spring 中默認(rèn)的事務(wù)隔離級(jí)別,以連接的數(shù)據(jù)庫(kù)的事務(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è)問(wèn)題稱之為臟讀。
  3. READ_COMMITTED:讀已提交,也叫提交讀,該隔離級(jí)別的事務(wù)能讀取到已經(jīng)提交事務(wù)的數(shù)據(jù),因此它不會(huì)有臟讀問(wèn)題。但由于在事務(wù)的執(zhí)行中可以讀取到其他事務(wù)提交的結(jié)果,所以在不同時(shí)間的相同 SQL 查詢中,可能會(huì)得到不同的結(jié)果,這種現(xiàn)象叫做不可重復(fù)讀。
  4. REPEATABLE_READ:可重復(fù)讀,它能確保同一事務(wù)多次查詢的結(jié)果一致。但也會(huì)有新的問(wèn)題,比如此級(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ù)讀和幻讀問(wèn)題,但因?yàn)閳?zhí)行效率低,所以真正使用的場(chǎng)景并不多。

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

事務(wù)隔離級(jí)別與問(wèn)題的對(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ù)。

3、設(shè)置事務(wù)隔離級(jí)別

在 Spring 中,事務(wù)的隔離級(jí)別有 2 種設(shè)置方法,一種是在編程式事務(wù)中,可以通過(guò)以下代碼來(lái)設(shè)置事務(wù)隔離級(jí)別:

另一種是在聲明式事務(wù)中設(shè)置事務(wù)隔離級(jí)別,設(shè)置方法如下:

總結(jié)

Spring 中的事務(wù)隔離級(jí)別比 MySQL 中的事務(wù)隔離級(jí)別多了一種,它包含的 5 種隔離級(jí)別分別是:

  1. Isolation.DEFAULT:默認(rèn)的事務(wù)隔離級(jí)別,以連接的數(shù)據(jù)庫(kù)的事務(wù)隔離級(jí)別為準(zhǔn)。
  2. Isolation.READ_UNCOMMITTED:讀未提交,可以讀取到未提交的事務(wù),存在臟讀。
  3. Isolation.READ_COMMITTED:讀已提交,只能讀取到已經(jīng)提交的事務(wù),解決了臟讀,存在不可重復(fù)讀。
  4. Isolation.REPEATABLE_READ:可重復(fù)讀,解決了不可重復(fù)讀,但存在幻讀(MySQL 數(shù)據(jù)庫(kù)默認(rèn)的事務(wù)隔離級(jí)別)。
  5. Isolation.SERIALIZABLE:串行化,可以解決所有并發(fā)問(wèn)題,但性能太低。

但需要注意是 Spring 是事務(wù)隔離級(jí)別是建立在連接的數(shù)據(jù)庫(kù)支持事務(wù)的基礎(chǔ)上的,如果 Spring 項(xiàng)目連接的數(shù)據(jù)庫(kù)不支持事務(wù)(或事務(wù)隔離級(jí)別),那么即使在 Spring 中設(shè)置了事務(wù)隔離級(jí)別,也是無(wú)效的設(shè)置。


文章名稱:面試突擊:Spring有幾種事務(wù)隔離級(jí)別?
文章網(wǎng)址:http://www.dlmjj.cn/article/cdpsgso.html