国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開發(fā) > 綜合 > 正文

關(guān)于數(shù)據(jù)庫(kù)事務(wù)隔離級(jí)別與鎖

2024-07-21 02:52:15
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
 一、什么是事務(wù)事務(wù)簡(jiǎn)單的來(lái)說(shuō)就是把對(duì)數(shù)據(jù)庫(kù)的一系列操作放到一個(gè)可控制的過程中,進(jìn)行可量化的控制,事務(wù)有4個(gè)必須的屬性原則:1、原子性:必須保證在一個(gè)事務(wù)中的操作要么全部執(zhí)行,要么全部不執(zhí)行。2、一致性:事務(wù)操作在完成時(shí)必須使數(shù)據(jù)庫(kù)保持一致的狀態(tài),內(nèi)部數(shù)據(jù)結(jié)構(gòu)必須是完整的。比如一個(gè)例子 A和B都有50塊錢,他們兩個(gè)無(wú)論怎么進(jìn)行相互轉(zhuǎn)賬,A+B始終是100。3、隔離性:簡(jiǎn)單的來(lái)說(shuō)就是各個(gè)事務(wù)之間的影響程度。4、持久性:不管數(shù)據(jù)庫(kù)是否發(fā)生問題,事務(wù)在完成之后數(shù)據(jù)應(yīng)該永遠(yuǎn)的保存在數(shù)據(jù)庫(kù)中 二、針對(duì)事務(wù)的隔離性引發(fā)的問題 事務(wù)之間是會(huì)相互影響的,這時(shí)候需要有一個(gè)規(guī)則來(lái)約束事務(wù)操作,于是有了事務(wù)隔離。事務(wù)隔離分為4種 : 由低到高依次為Read uncommitted(讀未提交)、Read committed(讀提交)、Repeatable read(重復(fù)讀)、Serializable(序列化,也叫串行化),這四個(gè)級(jí)別可以逐個(gè)解決臟讀、不可重復(fù)讀、幻讀這幾類問題。注:Sql Server 、Oracle事務(wù)隔離級(jí)別默認(rèn)是Read committed(讀提交),MySQL的默認(rèn)隔離級(jí)別就是Repeatable read(重復(fù)讀)假設(shè)數(shù)據(jù)庫(kù)事務(wù)隔離級(jí)別為以下4種依次舉例:1、Read uncommitted(讀未提交):A進(jìn)行了一條數(shù)據(jù)操作,但是沒有提交事務(wù),這時(shí)候如果B進(jìn)行這條數(shù)據(jù)查詢,是可以查到A的數(shù)據(jù)操作的,但是這時(shí)候A還沒有提交事務(wù),如果A不提交或者進(jìn)行了事務(wù)回滾,那么B查詢到的數(shù)據(jù)就是臟數(shù)據(jù)。2、Read committed(讀提交):A正在進(jìn)行數(shù)據(jù)操作,還沒有提交事務(wù),B這個(gè)時(shí)候也去查詢了A操作的這個(gè)數(shù)據(jù),并且修改了,馬上提交了事務(wù),這時(shí)候A再去提交事務(wù)的時(shí)候會(huì)發(fā)現(xiàn)數(shù)據(jù)不對(duì)了,因?yàn)锳手上的數(shù)據(jù)是B沒修改之前的,現(xiàn)在去提交時(shí),數(shù)據(jù)庫(kù)的數(shù)據(jù)已經(jīng)變成B更改之后的了,這種場(chǎng)景發(fā)生在金錢上會(huì)有很大問題,明明卡上有錢的A去消費(fèi),結(jié)果B搶在A前面消費(fèi)完了,這時(shí)候A就是沒法付賬了。這就是不可重復(fù)讀。3、Repeatable read(重復(fù)讀):這種情況只會(huì)發(fā)生在有一個(gè)事務(wù)在新增操作,比如A在查自己的銀行卡現(xiàn)在是100塊錢,A表示看花了,想再查一次,這時(shí)候有個(gè)人在給他轉(zhuǎn)賬,然后A第二次查詢,查出了1000塊了,又不敢相信自己是不是看花了。這就是幻讀。4、Serializable(序列化,也叫串行化):Serializable是最高的事務(wù)隔離級(jí)別,同時(shí)代價(jià)也花費(fèi)最高,性能很低,一般很少使用,在該級(jí)別下,事務(wù)順序執(zhí)行,不僅可以避免臟讀、不可重復(fù)讀,還避免了幻像讀。事務(wù)隔離級(jí)別參考了一個(gè)哥們的博客http://blog.csdn.net/fg2006/article/details/6937413三、數(shù)據(jù)庫(kù)鎖(這里只說(shuō)幾種常見的鎖,不怎么用的鎖我不知道、也不研究,需要的自行問度娘)樂觀鎖與悲觀鎖就是一個(gè)操作數(shù)據(jù)的姿勢(shì)問題,樂觀心態(tài)與悲觀心態(tài)1、樂觀鎖:每次去找數(shù)據(jù)庫(kù)拿數(shù)據(jù)都認(rèn)為別人不會(huì)對(duì)數(shù)據(jù)做什么更改,所以不會(huì)上鎖。但是在找數(shù)據(jù)庫(kù)要數(shù)據(jù)的時(shí)候會(huì)帶一個(gè)數(shù)據(jù)版本過來(lái),做更新的時(shí)候會(huì)去把拿到的這個(gè)版本與數(shù)據(jù)庫(kù)現(xiàn)在的要修改的數(shù)據(jù)版本做對(duì)比 只有大于或者等于數(shù)據(jù)庫(kù)中的數(shù)據(jù)版本,那么它就認(rèn)為這次操作是對(duì)的,可以執(zhí)行。否則就不執(zhí)行。2、悲觀鎖(for update):每次去找數(shù)據(jù)庫(kù)拿數(shù)據(jù)都認(rèn)為別人會(huì)改,所以它在查詢的時(shí)候就給數(shù)據(jù)加鎖,其他人只能查詢數(shù)據(jù)不能對(duì)數(shù)據(jù)做修改,只能等加鎖的人操作完成之后才會(huì)釋放鎖。樂觀鎖適用于寫比較少的情況下,即沖突真的很少發(fā)生的時(shí)候,這樣可以省去了鎖的開銷,加大了系統(tǒng)的整個(gè)吞吐量。但如果經(jīng)常產(chǎn)生沖突,上層應(yīng)用會(huì)不斷的進(jìn)行retry,這樣反倒是降低了性能,所以這種情況下用悲觀鎖就比較合適。3、共享鎖:又稱讀鎖,若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上S鎖,則事務(wù)T可以讀A但不能修改A,其他事務(wù)只能再對(duì)A加S鎖,而不能加X鎖,直到T釋放A上的S鎖。這保證了其他事務(wù)可以讀A,但在T釋放A上的S鎖之前不能對(duì)A做任何修改4、排它鎖:又稱寫鎖。若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上X鎖,事務(wù)T可以讀A也可以修改A,其他事務(wù)不能再對(duì)A加任何鎖,直到T釋放A上的鎖。這保證了其他事務(wù)在T釋放A上的鎖之前不能再讀取和修改A。 
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 临颍县| 台北市| 交口县| 读书| 四平市| 宾阳县| 吉水县| 青河县| 澄江县| 金湖县| 获嘉县| 阿尔山市| 马尔康县| 广灵县| 锡林浩特市| 凌云县| 东阿县| 桐乡市| 丰县| 萨嘎县| 岑溪市| 太原市| 吴忠市| 长泰县| 哈巴河县| 南江县| 鄂托克旗| 湖口县| 延津县| 长沙县| 申扎县| 三河市| 大方县| 卓资县| 嘉定区| 石景山区| 深州市| 金湖县| 会昌县| 驻马店市| 苏尼特右旗|