數(shù)據(jù)庫事務(wù)與并發(fā)處理_第1頁
數(shù)據(jù)庫事務(wù)與并發(fā)處理_第2頁
數(shù)據(jù)庫事務(wù)與并發(fā)處理_第3頁
數(shù)據(jù)庫事務(wù)與并發(fā)處理_第4頁
數(shù)據(jù)庫事務(wù)與并發(fā)處理_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

05數(shù)據(jù)庫事務(wù)與并發(fā)處理1教學(xué)內(nèi)容2數(shù)據(jù)庫事務(wù)的概念聲明事務(wù)邊界并發(fā)問題設(shè)置事務(wù)隔離級(jí)別使用悲觀鎖解決并發(fā)問題使用樂觀鎖解決并發(fā)問題數(shù)據(jù)庫事務(wù)的概念3事務(wù)是指一組相互依賴的操作行為,如銀行交易,股票交易或網(wǎng)上購物。事務(wù)的成功取決于這些相互依賴的操作行為是否都能執(zhí)行成功,只要有一個(gè)操作行為失敗,就意味著整個(gè)事務(wù)的失敗,例如:Tony到銀行辦理轉(zhuǎn)帳事務(wù),把

100元錢轉(zhuǎn)到j(luò)ack的帳號(hào)上,這個(gè)事務(wù)包含以下操作行為:1.從tom的帳戶上減去100元。2.往jack的帳戶上增加100元。以上兩個(gè)操作必需作為一個(gè)不可分割的工作單元,任何一個(gè)行為的失敗整個(gè)轉(zhuǎn)帳都不會(huì)成功。數(shù)據(jù)庫事務(wù)是對(duì)現(xiàn)實(shí)生活中事務(wù)的模擬,它由一組在業(yè)務(wù)邏輯上相互依賴的SQL語句組成。事務(wù)的四個(gè)特性4原子性:Atomicity一致性:Consistency隔離性:Isolation持久性:Durability數(shù)據(jù)庫事務(wù)的生命周期5聲明事務(wù)的邊界6事務(wù)的開始邊界事務(wù)的正常結(jié)束邊界(COMMIT):提交事務(wù),永久的保存被事務(wù)更新后的數(shù)據(jù)庫狀態(tài)。事務(wù)的異常結(jié)束邊界(ROLLBACK):撤銷事務(wù),使數(shù)據(jù)庫退回到執(zhí)行事務(wù)前的初始狀態(tài)。通過JDBC

API來聲明事務(wù)邊界7Connection類提供了用于控制事務(wù)的方法:setAutoCommit(booleanautoCommit):設(shè)置是否自動(dòng)提交事務(wù)commit():提交事務(wù)rollback():撤銷事務(wù)通過Hibernate

API聲明事務(wù)的邊界8聲明事務(wù)的開始邊界Transaction

tx

=

session.beginTransaction();提交事務(wù)mit();撤銷事務(wù)tx.

rollback()多個(gè)事務(wù)并發(fā)運(yùn)行時(shí)的并發(fā)問題9單個(gè)事務(wù)能保證單項(xiàng)業(yè)務(wù)的數(shù)據(jù)完整性,但是當(dāng)多個(gè)事務(wù)同時(shí)運(yùn)行時(shí)可能帶來并發(fā)問題,具體體現(xiàn)在:第一類丟失更新:在撤銷一個(gè)事務(wù)時(shí),把其它事務(wù)提交的更新數(shù)據(jù)覆蓋。臟讀:一個(gè)事務(wù)讀到另一事務(wù)未提交的更新數(shù)據(jù)。虛讀:一個(gè)事務(wù)讀到另一事務(wù)已提交的新插入的數(shù)據(jù)。不可重復(fù)讀:一個(gè)事務(wù)讀到另一事務(wù)已提交的更新數(shù)據(jù)。第二類丟失更新:這是不可重復(fù)讀中的特例,一個(gè)事務(wù)覆蓋另一事務(wù)已提交的更新數(shù)據(jù)。第一類丟失問題時(shí)間取款事務(wù)轉(zhuǎn)賬事務(wù)T1開始事務(wù)T2開始事務(wù)T3查詢賬戶余額為1000元T4查詢賬戶余額為1000元T5匯入100元把余額改為1100元T6提交事務(wù)T7取出100元把余額改為900元T8撤銷事務(wù)余額恢復(fù)為1000元10臟讀問題時(shí)間取款事務(wù)轉(zhuǎn)賬事務(wù)T1開始事務(wù)T2開始事務(wù)T3T4查詢賬戶余額為1000元T5取出100元把余額改為900元T6查詢賬戶余額為900元(臟讀)T7撤銷事務(wù)余額恢復(fù)為1000元T8匯入100元把余額改為1000元T9提交事務(wù)11虛讀問題時(shí)間注冊事務(wù)統(tǒng)計(jì)事務(wù)T1T2開始事務(wù)開始事務(wù)T3統(tǒng)計(jì)注冊客戶總數(shù)為10000人T4T5T6注冊一個(gè)新用戶提交事務(wù)統(tǒng)計(jì)注冊客戶總數(shù)為10001人T7到底哪一個(gè)統(tǒng)計(jì)數(shù)據(jù)有效?12不可重復(fù)讀轉(zhuǎn)賬事務(wù)時(shí)

間 取款事務(wù)T1

開始事務(wù)元T2T3查詢賬戶余額為1000開始事務(wù)T4T5取出100元把余額改為900元查詢賬戶余額為1000元T6T7提交事務(wù)查詢賬戶余額為900元T8余額到底是1000元還是900元?13第二類丟失更新時(shí)

間 取款事務(wù)轉(zhuǎn)賬事務(wù)開始事務(wù)查詢賬戶余額為1000元取出100元把余額改為900元提交事務(wù)T1

開始事務(wù)T2T3

查詢賬戶余額為1000元T4T5T6T7T8匯入100元把余額改為1100元T9提交事務(wù)14數(shù)據(jù)庫的事務(wù)隔離級(jí)別15隔離級(jí)別與并發(fā)性能的關(guān)系16設(shè)定隔離級(jí)別的原則17隔離級(jí)別越高,越能保證數(shù)據(jù)的完整性和一致性,但是對(duì)并發(fā)性能的影響也越大。對(duì)于多數(shù)據(jù)應(yīng)用程序,可以優(yōu)先考慮把數(shù)據(jù)庫系統(tǒng)的隔離級(jí)別設(shè)為ReadCommitted,它能夠避免臟讀,而且具有較好的并發(fā)性能。盡管它會(huì)導(dǎo)致不可重復(fù)讀,虛讀和第二類丟失更新這些并發(fā)問題,在可能出現(xiàn)這類問題的個(gè)別場合,可以由應(yīng)用程序悲觀鎖和樂觀鎖來解決。在hibernate中設(shè)置隔離級(jí)別18使用悲觀鎖19利用悲觀鎖協(xié)調(diào)并發(fā)事務(wù)20使用樂觀鎖21利用<version>元素對(duì)Accounts表中的記錄進(jìn)行版本控制22利用<version>元素對(duì)Accounts表中的記錄進(jìn)行版本控制23利用<version>元素對(duì)Accounts表中的記錄進(jìn)行版本控制24利用<version>元素對(duì)Accounts表中的記錄進(jìn)行版本控制25利用樂觀鎖協(xié)調(diào)并發(fā)事務(wù)的處理26時(shí)間取款事務(wù)支票轉(zhuǎn)帳事務(wù)T1開始事務(wù)T2開始事務(wù)T3Select

*fromcounts

where

id=1,查詢結(jié)果顯示余額為1000T4Select

*fromcounts

where

id=1查詢結(jié)果顯示余額為1000,樂觀鎖字段

version值為0T5取出100,updatecounts

set

amount=

900,version=1whereid=1and

version

=

0T6提交事務(wù)T7匯入操作:updatecounts

set

amount=1100,

version=1where

id=1

andversion=0,找不到匹配的記錄,拋出:StaleObjectStateException實(shí)現(xiàn)樂觀鎖的其它方式27注解的方式加樂觀鎖28@org.hibernate.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論