日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库 - 事务管理(ACID)隔离级别 事务传播行为

發(fā)布時間:2023/12/3 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库 - 事务管理(ACID)隔离级别 事务传播行为 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)載自? ?數(shù)據(jù)庫 - 事務(wù)管理(ACID)隔離級別 事務(wù)傳播行為

總覽:

事務(wù)的4大特性(ACID)

原子性(Atomicity)
  原子性是指事務(wù)包含的所有操作要么全部成功,要么全部失敗回滾,這和前面兩篇博客介紹事務(wù)的功能是一樣的概念,因此事務(wù)的操作如果成功就必須要完全應(yīng)用到數(shù)據(jù)庫,如果操作失敗則不能對數(shù)據(jù)庫有任何影響。
一致性(Consistency)
  一致性是指事務(wù)必須使數(shù)據(jù)庫從一個一致性狀態(tài)變換到另一個一致性狀態(tài),也就是說一個事務(wù)執(zhí)行之前和執(zhí)行之后都必須處于一致性狀態(tài)。
  拿轉(zhuǎn)賬來說,假設(shè)用戶A和用戶B兩者的錢加起來一共是5000,那么不管A和B之間如何轉(zhuǎn)賬,轉(zhuǎn)幾次賬,事務(wù)結(jié)束后兩個用戶的錢相加起來應(yīng)該還得是5000,這就是事務(wù)的一致性。
隔離性(Isolation)
  隔離性是當(dāng)多個用戶并發(fā)訪問數(shù)據(jù)庫時,比如操作同一張表時,數(shù)據(jù)庫為每一個用戶開啟的事務(wù),不能被其他事務(wù)的操作所干擾,多個并發(fā)事務(wù)之間要相互隔離。
  即要達(dá)到這么一種效果:對于任意兩個并發(fā)的事務(wù)T1和T2,在事務(wù)T1看來,T2要么在T1開始之前就已經(jīng)結(jié)束,要么在T1結(jié)束之后才開始,這樣每個事務(wù)都感覺不到有其他事務(wù)在并發(fā)地執(zhí)行。
  關(guān)于事務(wù)的隔離性數(shù)據(jù)庫提供了多種隔離級別,稍后會介紹到。
持久性(Durability)
  持久性是指一個事務(wù)一旦被提交了,那么對數(shù)據(jù)庫中的數(shù)據(jù)的改變就是永久性的,即便是在數(shù)據(jù)庫系統(tǒng)遇到故障的情況下也不會丟失提交事務(wù)的操作。

事務(wù)并發(fā)訪問的問題(隔離性)

臟讀
兩個事務(wù)正在并發(fā)的執(zhí)行,事實上最后結(jié)果應(yīng)該是1500才對,時間5時刻的查詢余額為0就是臟數(shù)據(jù),事務(wù)A讀取了事務(wù)B中未提交的數(shù)據(jù),這就是臟讀。

時間事務(wù)A事務(wù)B
1開始事務(wù)-
2-開始事務(wù)
3-查詢余額有1000
4-取出1000,余額0
5查詢余額0-
6-撤銷掉事務(wù)
7存入500,余額500-
8提交事務(wù)-

不可重復(fù)讀
兩個事務(wù)正在并發(fā)的執(zhí)行,結(jié)果A兩次讀取的結(jié)果不一樣,這是因為兩次查詢有間隔,期間被其他事務(wù)修改并提交了事務(wù),相比臟讀的區(qū)別是,不可重復(fù)讀是讀取另一事務(wù)提交的數(shù)據(jù)。這種現(xiàn)象也是正常的,是由于事務(wù)的隔離級造成的,但是在在某些特別的情況下也是不允許的。

時間事務(wù)A事務(wù)B
1開始事務(wù)-
2-開始事務(wù)
3-查詢余額有1000
4查詢余額1000-
5?取出1000,余額0
6-提交事務(wù)
7查詢余額0-

幻讀
兩個事務(wù)正在并發(fā)的執(zhí)行,事務(wù)A第一次統(tǒng)計和第二統(tǒng)計的結(jié)果不一樣,是因為事務(wù)B新增了一條數(shù)據(jù),和不可重復(fù)讀一樣,都是讀取了另外一個事務(wù)的數(shù)據(jù),不同的是不可重復(fù)讀查詢的是同一條數(shù)據(jù),而幻讀則是針對批量的數(shù)據(jù),或者說不可重復(fù)讀是A讀取了B的更新數(shù)據(jù),幻讀是A讀取了B的新增數(shù)據(jù)。

時間事務(wù)A事務(wù)B
1開始事務(wù)-
2-開始事務(wù)
3統(tǒng)計總金額10000-
4--
5?存入100
6-提交事務(wù)
7統(tǒng)計總金額10100-

數(shù)據(jù)庫的隔離級別(MySQL為例)

明白上面的問題之后就明白為什么需要隔離級別了,不同的隔離級別能處理不同的并發(fā)事務(wù)問題,下表:

事務(wù)級別臟讀不可重復(fù)讀幻覺讀
READ_UNCOMMITTED允許允許允許
READ_COMMITTED禁止允許允許
REPEATABLE_READ禁止禁止允許
SERIALIZABLE禁止禁止禁止

MySQL默認(rèn)的事務(wù)級別是READ_COMMITTED

JDBC的數(shù)據(jù)隔離級別設(shè)置

JDBC?訪問
TRANSACTION_READ_UNCOMMITTEDur就是俗稱“臟讀”(dirty read),在沒有提交數(shù)據(jù)時能夠讀到已經(jīng)更新的數(shù)據(jù)
TRANSACTION_READ_COMMITTEDcs在一個事務(wù)中進(jìn)行查詢時,允許讀取提交前的數(shù)據(jù),數(shù)據(jù)提交后,當(dāng)前查詢就可以讀取到數(shù)據(jù)。update數(shù)據(jù)時候并不鎖住表
TRANSACTION_REPEATABLE_READrs在一個事務(wù)中進(jìn)行查詢時,不允許讀取其他事務(wù)update的數(shù)據(jù),允許讀取到其他事務(wù)提交的新增數(shù)據(jù)
TRANSACTION_SERIALIZABLErr在一個事務(wù)中進(jìn)行查詢時,不允許任何對這個查詢表的數(shù)據(jù)修改。

Spring的事務(wù)傳播行為

事務(wù)傳播

事務(wù)怎么傳播?方法A傳播到方法B。
Spring解決的就是方法之間的事務(wù)傳播。
下面看下每一種行為具體代表的含義:

REQUIRED

業(yè)務(wù)方法需要在一個事務(wù)中運行。如果方法運行時,已經(jīng)處在一個事務(wù)中,那么這個時候就會加入到該事務(wù)中,如果當(dāng)前沒有事務(wù)環(huán)境的話,就會為自己創(chuàng)建一個新的事務(wù)。

SUPPORTS

這一事務(wù)屬性表明,如果業(yè)務(wù)方法A在某個事務(wù)范圍內(nèi)被調(diào)用,則方法成為事務(wù)的一部分。如果業(yè)務(wù)方法在事務(wù)范圍外被調(diào)用,則方法在沒有事務(wù)的環(huán)境下執(zhí)行。即當(dāng)標(biāo)注了事務(wù)傳播屬性——SUPPORTS的業(yè)務(wù)方法在另一個bean的業(yè)務(wù)方法中執(zhí)行時,如果另一個bean的業(yè)務(wù)方法開啟了事務(wù),它就會處在事務(wù)中執(zhí)行,如果另一個bean的業(yè)務(wù)方法也沒開啟事務(wù),那么它也在沒有事務(wù)的環(huán)境中進(jìn)行。

MANDATORY

該屬性指定業(yè)務(wù)方法只能在一個已經(jīng)存在的事務(wù)中執(zhí)行,業(yè)務(wù)方法不能發(fā)起自己的事務(wù)。如果業(yè)務(wù)方法在沒有事務(wù)的環(huán)境下調(diào)用,容器就會拋出異常。一種比較強硬的方式。

REQUIRES_NEW

該屬性表明不管當(dāng)前是否存在事務(wù),業(yè)務(wù)方法總會為自己發(fā)起一個新的事務(wù)。如果方法已經(jīng)運行在一個事務(wù)中,則原有事務(wù)會被掛起,新的事務(wù)會被創(chuàng)建,直到方法執(zhí)行結(jié)束,新事務(wù)才算結(jié)束,原先的事務(wù)才會恢復(fù)執(zhí)行。

NOT_SUPPORTED

聲明方法不需要事務(wù)。如果方法沒有關(guān)聯(lián)到一個事務(wù),容器不會為它開啟事務(wù)。如果方法在一個事務(wù)中被調(diào)用(在其他業(yè)務(wù)bean的方法中被調(diào)用了,而其他業(yè)務(wù)bean的方法是開啟了事務(wù)的),該事務(wù)會被掛起,在方法調(diào)用結(jié)束后,原先的事務(wù)便會恢復(fù)執(zhí)行。

NEVER

指定業(yè)務(wù)方法絕對不能在事務(wù)范圍內(nèi)執(zhí)行。如果業(yè)務(wù)方法在某個事務(wù)中執(zhí)行,容器會拋出異常,只有業(yè)務(wù)方法沒有關(guān)聯(lián)到任何事務(wù),才能正常執(zhí)行。比較強硬的方式,就是不支持事務(wù)。

NESTED

(嵌套事務(wù))如果一個活動的事務(wù)存在,則當(dāng)前方法運行在一個嵌套的事務(wù)中。 如果沒有活動事務(wù),就創(chuàng)建一個新的事務(wù)。它使用了一個單獨的事務(wù),這個事務(wù)擁有多個可以回滾的保存點。內(nèi)部事務(wù)的回滾不會對外部事務(wù)造成影響。外部事務(wù)回滾會導(dǎo)致內(nèi)部事務(wù)的回滾。如果被調(diào)用的內(nèi)部方法沒有捕獲異常,跑出異常也會導(dǎo)致外部事務(wù)的回滾。

看下Spring中枚舉定義的7種事務(wù)傳播行為

package org.springframework.transaction.annotation;public enum Propagation {REQUIRED(0),SUPPORTS(1),MANDATORY(2),REQUIRES_NEW(3),NOT_SUPPORTED(4),NEVER(5),NESTED(6);private final int value;private Propagation(int value) {this.value = value;}public int value() {return this.value;} }

在使用注解方式的事務(wù)時候我們可以用下面的方式來設(shè)置事務(wù)的傳播行為

@Transactional(propagation?= Propagation.REQUIRED)

是不是很方便。

只讀事務(wù)

readOnly屬性:設(shè)置為只讀事務(wù),對于只讀事務(wù),它就不能進(jìn)行更新操作,一般只存在數(shù)據(jù)讀取的時候,可以將readOnly屬性設(shè)置為true,可提供效率。

事務(wù)超時

timeout屬性:代表事務(wù)的超時時間,默認(rèn)為30s,一般情況下都不需要設(shè)置超時時間。如果超過時間就回滾。

總結(jié)

以上是生活随笔為你收集整理的数据库 - 事务管理(ACID)隔离级别 事务传播行为的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 99久国产 | 香蕉依人 | 国产调教在线观看 | 日韩中文字幕电影 | 国产欧美精品一区二区三区 | 欧美一区二区黄色 | 永久免费av无码网站性色av | 国产主播福利在线 | 久久久高潮 | 国产 欧美 日本 | 色噜噜在线| 粉嫩av一区二区三区免费观看 | 国产va在线 | aaa影院 | 欧美色图12p | 中文人妻一区二区三区 | 欧美日韩视频一区二区 | 91成人免费在线观看 | 黄色片a级 | 8x8ⅹ8成人免费视频观看 | 大又大粗又爽又黄少妇毛片 | 色妻av| 精品人伦一区二区三区蜜桃免费 | 亚洲免费影视 | 亚洲一区图片 | 国产精品久久久久久无人区 | 亚洲成年网站 | 色爽视频 | www夜夜| 8x8ⅹ国产精品一区二区二区 | 天天做天天爽 | 超碰国产一区二区三区 | 日韩欧美精品一区二区三区 | 外国电影免费观看高清完整版 | 日韩高清在线一区二区 | 国产综合视频一区二区 | 欧美日一区二区 | 日韩欧美综合 | 欧美无遮挡高潮床戏 | www.99爱| 国产亚洲色婷婷久久 | 超碰在线免费 | 丰满白嫩尤物一区二区 | 一本到在线观看 | 红杏出墙记 | 国产精品传媒 | 女色婷婷| 台湾佬中文字幕 | 欧美午夜精品一区二区 | 久草视频播放 | 美女福利视频一区 | 97国产成人 | 亚洲影院av | 午夜欧美精品 | 看黄色小视频 | 日韩六十路| 国产青青草| 日韩精品一区二区亚洲av性色 | 在线观看毛片av | 陪读偷伦初尝小说 | 午夜激情国产 | 亚洲AV无码一区二区三区少妇 | 日韩国产一区 | 精品少妇久久久久久888优播 | 亚洲精品美女久久久 | 免费观看a级片 | 色婷婷av一区二区三区大白胸 | 欧美成免费 | 男男一级淫片免费播放 | 黑人糟蹋人妻hd中文字幕 | 中文字幕免费在线看线人动作大片 | 在线不卡日韩 | 黄网站色视频免费观看 | 亚洲人体一区 | 欧洲精品无码一区二区 | 91麻豆精品国产91久久久久久 | 国产精品三级av | 天堂在线观看av | 欧美一级激情 | 麻豆免费在线观看 | 加勒比综合网 | 九月色婷婷 | 人人人妻人人澡人人爽欧美一区 | xxxx69国产 | 欧美一级啪啪 | 思思99re| 国产香蕉在线 | 中出av在线 | wwwxxoo | av在线男人天堂 | 国产不卡高清 | 日韩亚洲精品在线 | 校园激情亚洲 | jjzz日本视频 | 亚洲成a人片在线www | 日韩精品中文字幕在线播放 | 人人澡人人澡人人澡 | 三极片黄色 | 欧美一区二区三区四区在线观看 |