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

面試突擊:Spring 有幾種事務隔離級別?

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

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

1、什么是事務隔離級別?

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

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

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

2、Spring 事務隔離級別

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

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

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

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

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

3、設置事務隔離級別

在 Spring 中,事務的隔離級別有 2 種設置方法,一種是在編程式事務中,可以通過以下代碼來設置事務隔離級別:

另一種是在聲明式事務中設置事務隔離級別,設置方法如下:

總結

Spring 中的事務隔離級別比 MySQL 中的事務隔離級別多了一種,它包含的 5 種隔離級別分別是:

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

但需要注意是 Spring 是事務隔離級別是建立在連接的數據庫支持事務的基礎上的,如果 Spring 項目連接的數據庫不支持事務(或事務隔離級別),那么即使在 Spring 中設置了事務隔離級別,也是無效的設置。

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

2022-10-09 20:52:19

事務隔離級別傳播機制

2022-06-29 11:01:05

MySQL事務隔離級別

2021-09-02 18:39:01

Spring隔離級別

2009-06-29 17:54:47

Spring事務隔離

2022-04-11 07:40:45

synchroniz靜態(tài)方法程序

2021-01-18 11:49:26

面試事務隔離

2022-08-24 07:06:36

SpringSetter項目

2022-05-23 07:35:15

單例模式懶漢模式靜態(tài)內部類

2022-04-18 07:36:37

TimeUnit線程休眠

2018-12-19 16:46:38

MySQL事務隔離數據庫

2010-11-19 16:13:06

oracle事務隔離級

2022-09-27 21:14:54

Spring事務傳播機制

2021-07-26 10:28:13

MySQL事務隔離

2024-04-26 09:17:20

MySQL事務隔離

2021-08-04 13:19:42

MySQL 事務隔離

2023-02-02 07:06:10

2022-08-17 07:06:14

SpringBoot配置@Value

2022-03-07 07:33:16

線程池Java語言

2024-12-02 08:37:04

2022-09-13 13:49:05

數據庫隔離
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品国产一区二区在线 | 午夜精品久久 | av中文字幕网站 | 精品国产黄a∨片高清在线 www.一级片 国产欧美日韩综合精品一区二区 | 欧美精选一区二区 | 美女久久视频 | 欧美在线综合 | 日本一区二区三区在线观看 | 97精品超碰一区二区三区 | 免费v片 | 天天操天天射天天 | 久久久观看| 欧美性jizz18性欧美 | 久久免费资源 | 成人免费视屏 | 美女视频黄的免费 | 人人玩人人添人人澡欧美 | 亚洲精品视频免费观看 | 国产欧美在线观看 | 国产一区亚洲二区三区 | 午夜免费观看 | 日本不卡一区二区三区 | 免费视频成人国产精品网站 | 亚洲网站在线观看 | 国家一级黄色片 | 成人国产精品久久 | 国产精品国产a级 | 国产一在线 | 精品国产乱码久久久久久丨区2区 | 国产精品成人国产乱一区 | 久久久久久一区 | 国产精品一区二区在线免费观看 | 亚洲一区二区三区在线免费 | 九色 在线| ww亚洲ww亚在线观看 | 国产这里只有精品 | 成人一区二区三区在线观看 | 青青久草 | av一级久久 | 国产成人影院 | 精品视频一区二区三区在线观看 |