日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

數(shù)據(jù)庫事務(wù)4種隔離級別及7種傳播行為

 liang1234_ 2019-02-21

一:數(shù)據(jù)庫的事物隔離級別與傳播行為總結(jié):

            

很多人容易搞混不可重復(fù)讀和幻讀,確實(shí)這兩者有些相似。但不可重復(fù)讀重點(diǎn)在于update和delete,而幻讀的重點(diǎn)在于insert。
避免不可重復(fù)讀需要鎖行就行
避免幻影讀則需要鎖表
如果使用鎖機(jī)制來實(shí)現(xiàn)這兩種隔離級別,在可重復(fù)讀中,該sql第一次讀取到數(shù)據(jù)后,就將這些數(shù)據(jù)加鎖,其它事務(wù)無法修改這些數(shù)據(jù),就可以實(shí)現(xiàn)可重復(fù) 讀了。但這種方法卻無法鎖住insert的數(shù)據(jù),所以當(dāng)事務(wù)A先前讀取了數(shù)據(jù),或者修改了全部數(shù)據(jù),事務(wù)B還是可以insert數(shù)據(jù)提交,這時(shí)事務(wù)A就會 發(fā)現(xiàn)莫名其妙多了一條之前沒有的數(shù)據(jù),這就是幻讀,不能通過行鎖來避免。需要Serializable隔離級別 ,讀用讀鎖,寫用寫鎖,讀鎖和寫鎖互斥,這么做可以有效的避免幻讀、不可重復(fù)讀、臟讀等問題,但會極大的降低數(shù)據(jù)庫的并發(fā)能力。
所以說不可重復(fù)讀和幻讀最大的區(qū)別,就在于如何通過鎖機(jī)制來解決他們產(chǎn)生的問題。


數(shù)據(jù)庫中事務(wù)的四大特性(ACID)
(1) 原子性 ⑵ 一致性 ⑶ 隔離性 ⑷ 持久性
現(xiàn)在來看看MySQL數(shù)據(jù)庫為我們提供的事物的四種隔離級別:
關(guān)于spring的事務(wù)隔離級別與數(shù)據(jù)庫的一樣,也是下面的四個(gè),只不過多了一個(gè)default
1.Read uncommitted (讀未提交):最低級別,任何情況都無法保證。
2.Read committed (讀已提交):可避免臟讀的發(fā)生。
3.Repeatable read (可重復(fù)讀):可避免臟讀、不可重復(fù)讀的發(fā)生。
4.Serializable (串行化):可避免臟讀、不可重復(fù)讀、幻讀的發(fā)生。

 以上四種隔離級別最高的是Serializable級別,最低的是Read uncommitted級別,當(dāng)然級別越高,執(zhí)行效率就越低。像Serializable這樣的級別,就是以鎖表的方式(類似于Java多線程中的鎖)使得其他的線程只能在鎖外等待,所以平時(shí)選用何種隔離級別應(yīng)該根據(jù)實(shí)際情況。在MySQL數(shù)據(jù)庫中默認(rèn)的隔離級別為Repeatable read (可重復(fù)讀)。
  在MySQL數(shù)據(jù)庫中,支持上面四種隔離級別,默認(rèn)的為Repeatable read (可重復(fù)讀);而在Oracle數(shù)據(jù)庫中,只支持Serializable (串行化)級別和Read committed (讀已提交)這兩種級別,其中默認(rèn)的為Read committed級別

isolation(隔離)
4.查看MySQL數(shù)據(jù)庫當(dāng)前事務(wù)的隔離級別 select @@tx_isolation;

5.在MySQL數(shù)據(jù)庫中設(shè)置事務(wù)的隔離 級別: set tx_isolation=’隔離級別名稱;’

6.查看mysql的事物是否是自動提交
1或者on代表啟用,0或者off代表禁用,當(dāng)autocommit=0時(shí),所有的差丶都是在一個(gè)事物中,直到顯示的執(zhí)行commit提交或者rollback回滾,該事物結(jié)束,同時(shí)又開始了另一個(gè)新的事物


二:數(shù)據(jù)庫的傳播行為:

傳播行為分為兩種:分為支持事物的傳播和不支持事物的傳播
1、PROPAGATION_REQUIRED:(支持事物)如果當(dāng)前沒有事務(wù),就創(chuàng)建一個(gè)新事務(wù),如果當(dāng)前存在事務(wù),就加入該事務(wù),該設(shè)置是最常用的設(shè)置。
2、PROPAGATION_SUPPORTS:(支持事物)支持當(dāng)前事務(wù),如果當(dāng)前存在事務(wù),就加入該事務(wù),如果當(dāng)前不存在事務(wù),就以非事務(wù)執(zhí)行?!?/span>
3、PROPAGATION_MANDATORY:(支持事物)支持當(dāng)前事務(wù),如果當(dāng)前存在事務(wù),就加入該事務(wù),如果當(dāng)前不存在事務(wù),就拋出異常。
4、PROPAGATION_REQUIRES_NEW:(支持事物)創(chuàng)建新事務(wù),無論當(dāng)前存不存在事務(wù),都創(chuàng)建新事務(wù)。
5、PROPAGATION_NOT_SUPPORTED:(不支持事物)以非事務(wù)方式執(zhí)行操作,如果當(dāng)前存在事務(wù),就把當(dāng)前事務(wù)掛起。
6、PROPAGATION_NEVER:(不支持事物)以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則拋出異常。
7、PROPAGATION_NESTED:(不支持事物)如果當(dāng)前存在事務(wù),則在嵌套事務(wù)內(nèi)執(zhí)行。如果當(dāng)前沒有事務(wù),則執(zhí)行與PROPAGATION_REQUIRED類似的操作。
已混淆點(diǎn):spring的事務(wù)是什么?與數(shù)據(jù)庫的事務(wù)是否一樣
本質(zhì)上其實(shí)是同一個(gè)概念,spring的事務(wù)是對數(shù)據(jù)庫的事務(wù)的封裝,最后本質(zhì)的實(shí)現(xiàn)還是在數(shù)據(jù)庫,假如數(shù)據(jù)庫不支持事務(wù)的話,spring的事務(wù)是沒有作用的.數(shù)據(jù)庫的事務(wù)說簡單就只有開啟,回滾和關(guān)閉,spring對數(shù)據(jù)庫事務(wù)的包裝,原理就是拿一個(gè)數(shù)據(jù)連接,根據(jù)spring的事務(wù)配置,操作這個(gè)數(shù)據(jù)連接對數(shù)據(jù)庫進(jìn)行事務(wù)開啟,回滾或關(guān)閉操作

參考文章:

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多