事務(wù)、并發(fā)、隔離級(jí)別、鎖3_第1頁
事務(wù)、并發(fā)、隔離級(jí)別、鎖3_第2頁
事務(wù)、并發(fā)、隔離級(jí)別、鎖3_第3頁
事務(wù)、并發(fā)、隔離級(jí)別、鎖3_第4頁
事務(wù)、并發(fā)、隔離級(jí)別、鎖3_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

數(shù)據(jù)庫

并發(fā)、事務(wù)、隔離級(jí)別、鎖新事業(yè)部:程學(xué)文目錄事務(wù)與并發(fā)隔離級(jí)別和鎖行版本控制(2005)死鎖與解鎖事務(wù)與并發(fā)隔離級(jí)別和鎖行版本控制(2005)死鎖與解鎖并發(fā)與事務(wù)>數(shù)據(jù)完整性數(shù)據(jù)完整性:數(shù)據(jù)完整性(DataIntegrity)是指數(shù)據(jù)的精確性、是指數(shù)據(jù)的精確性和可靠性。它是應(yīng)防止數(shù)據(jù)庫中存在不符合語義規(guī)定的數(shù)據(jù)和防止因錯(cuò)誤信息的輸入輸出造成無效操作或錯(cuò)誤信息而提出的。數(shù)據(jù)完整性分為四類:a.實(shí)體完整性(EntityIntegrity)b.域完整性(DomainIntegrity)c.參照完整性(ReferentialIntegrity)d.用戶定義的完整性(User-definedIntegrity)并發(fā)與事務(wù)>數(shù)據(jù)完整性>實(shí)體完整性實(shí)體完整性:概念:實(shí)體完整性指表中行的完整性。要求表中的所有行都有唯一的標(biāo)識(shí)符,稱為主關(guān)鍵字。主關(guān)鍵字是否可以修改,或整個(gè)列是否可以被刪除,取決于主關(guān)鍵字與其他表之間要求的完整性。實(shí)體完整性要求每一個(gè)表中的主鍵字段都不能為空或者重復(fù)的值。并發(fā)與事務(wù)>數(shù)據(jù)完整性>域完整性域完整性:概念:域完整性是針對(duì)某一具體關(guān)系數(shù)據(jù)庫的約束條件。它反映某一具體應(yīng)用所涉及的數(shù)據(jù)必須滿足的語義要求。域完整性指列的值域的完整性。如數(shù)據(jù)類型、格式、值域范圍、是否允許空值等。域完整性限制了某些屬性中出現(xiàn)的值,把屬性限制在一個(gè)有限的集合中。例如,如果屬性類型是整數(shù),那么它就不能是101.5或任何非整數(shù)。并發(fā)與事務(wù)>數(shù)據(jù)完整性>參照完整性參照完整性:概念:當(dāng)更新、刪除、插入一個(gè)表中的數(shù)據(jù)時(shí),通過參照引用相互關(guān)聯(lián)的另一個(gè)表中的數(shù)據(jù),來檢查對(duì)表的數(shù)據(jù)操作是否正確。簡單的說就是表間主鍵外鍵的關(guān)系,是相關(guān)聯(lián)的兩個(gè)表之間的約束。參照完整性屬于表間規(guī)則。對(duì)于永久關(guān)系的相關(guān)表,在更新、插入或刪除記錄時(shí),如果只改其一不改其二,就會(huì)影響數(shù)據(jù)的完整性:例如修改父表中關(guān)鍵字值后,子表關(guān)鍵字值未做相應(yīng)改變;刪除父表的某記錄后,子表的相應(yīng)記錄未刪除,致使這些記錄成為孤立記錄;對(duì)于子表插入的記錄,父表中沒有相應(yīng)關(guān)鍵字值的記錄;等等。對(duì)于這些設(shè)計(jì)表間數(shù)據(jù)的完整性,統(tǒng)稱為參照完整性。并發(fā)與事務(wù)>事務(wù)事務(wù):數(shù)據(jù)庫提供了多種保證數(shù)據(jù)完整性的方式,其中一種基本方式便是事務(wù)EX:銀行轉(zhuǎn)賬:甲向乙賬戶轉(zhuǎn)帳100元1.檢查甲賬戶余額是否超過100元2.如果大于100元,則甲賬戶扣除100元3.乙賬戶增加100元概念:數(shù)據(jù)庫事務(wù)是指作為單個(gè)邏輯工作單元執(zhí)行的一系列操作,事務(wù)內(nèi)的語句被作為一個(gè)整體執(zhí)行,確保除非事務(wù)性單元內(nèi)的所有操作都成功完成,否則不會(huì)永久更新面向數(shù)據(jù)的資源。并發(fā)與事務(wù)>事務(wù)>事務(wù)的特點(diǎn)事務(wù)的特點(diǎn):一個(gè)邏輯工作單元要成為事務(wù),必須滿足所謂的ACID(原子性、一致性、隔離性和持久性)屬性:a.原子性:事務(wù)必須是原子工作單元;對(duì)于其數(shù)據(jù)修改,要么全都執(zhí)行,要么全都不執(zhí)行。通常,與某個(gè)事務(wù)關(guān)聯(lián)的操作具有共同的目標(biāo),并且是相互依賴的。如果系統(tǒng)只執(zhí)行這些操作的一個(gè)子集,則可能會(huì)破壞事務(wù)的總體目標(biāo)。原子性消除了系統(tǒng)操作子集的可能性。b.一致性:事務(wù)的一致性指的是在一個(gè)事務(wù)執(zhí)行之前和執(zhí)行。之后數(shù)據(jù)庫都必須處于一致性狀態(tài)。這種特性稱為事務(wù)的一致性假如數(shù)據(jù)庫的狀態(tài)滿足所有的完整性約束,就說該數(shù)據(jù)庫是一致的。并發(fā)與事務(wù)>事務(wù)>事務(wù)的特點(diǎn)例如,當(dāng)數(shù)據(jù)庫處于一致性狀態(tài)S1時(shí),對(duì)數(shù)據(jù)庫執(zhí)行一個(gè)事務(wù),在事務(wù)執(zhí)行期間假定數(shù)據(jù)庫的狀態(tài)是不一致的,當(dāng)事務(wù)執(zhí)行結(jié)束時(shí),數(shù)據(jù)庫處在一致性狀態(tài)S2。c.隔離性:由并發(fā)事務(wù)所作的修改必須與任何其它并發(fā)事務(wù)所作的修改隔離。事務(wù)查看數(shù)據(jù)時(shí)數(shù)據(jù)所處的狀態(tài),要么是另一并發(fā)事務(wù)修改它之前的狀態(tài),要么是另一事務(wù)修改它之后的狀態(tài),事務(wù)不會(huì)查看中間狀態(tài)的數(shù)據(jù)。當(dāng)事務(wù)可序列化時(shí)將獲得最高的隔離級(jí)別。在此級(jí)別上,從一組可并行執(zhí)行的事務(wù)獲得的結(jié)果與通過連續(xù)運(yùn)行每個(gè)事務(wù)所獲得的結(jié)果相同。由于高度隔離會(huì)限制可并行執(zhí)行的事務(wù)數(shù),所以一些應(yīng)用程序降低隔離級(jí)別以換取更大的吞吐量。并發(fā)與事務(wù)>事務(wù)>事務(wù)的特點(diǎn)DBMS可以在并發(fā)執(zhí)行的事務(wù)間提供不同級(jí)別的分離。分離的級(jí)別和并發(fā)事務(wù)的吞吐量之間存在反比關(guān)系。較多事務(wù)的可分離性可能會(huì)帶來較高的沖突和較多的事務(wù)流產(chǎn)。流產(chǎn)的事務(wù)要消耗資源,這些資源必須要重新被訪問。因此,確保高分離級(jí)別的DBMS需要更多的開銷。d.持久性:持久性意味著當(dāng)系統(tǒng)或介質(zhì)發(fā)生故障時(shí),確保已提交事務(wù)的更新不能丟失。即一旦一個(gè)事務(wù)提交,DBMS保證它對(duì)數(shù)據(jù)庫中數(shù)據(jù)的改變應(yīng)該是永久性的,耐得住任何系統(tǒng)故障。持久性通過數(shù)據(jù)庫備份和恢復(fù)來保證。并發(fā)與事務(wù)>并發(fā)并發(fā):通常為了獲得更好的運(yùn)行性能,各種數(shù)據(jù)庫都允許多個(gè)事務(wù)同時(shí)運(yùn)行,這就是事務(wù)并發(fā)。當(dāng)并發(fā)的事務(wù)訪問或修改數(shù)據(jù)庫中相同的數(shù)據(jù)時(shí),通常需要采取必要的隔離機(jī)制,反之會(huì)出現(xiàn)各種并發(fā)問題。這些并發(fā)問題可歸納為以下四種:a.丟失或覆蓋更新。b.未確認(rèn)的相關(guān)性。(臟讀)c.不一致的分析。(不可重復(fù)讀)d.幻像讀并發(fā)與事務(wù)>并發(fā)>丟失更新丟失更新:當(dāng)兩個(gè)或多個(gè)事務(wù)選擇同一行,然后基于最初選定的值更新該行時(shí),會(huì)發(fā)生丟失更新問題。每個(gè)事務(wù)都不知道其它事務(wù)的存在。最后的更新將重寫由其它事務(wù)所做的更新,這將導(dǎo)致數(shù)據(jù)丟失。例如:兩個(gè)編輯人員制作了同一文檔的電子復(fù)本。每個(gè)編輯人員獨(dú)立地更改其復(fù)本,然后保存更改后的復(fù)本,這樣就覆蓋了原始文檔。最后保存其更改復(fù)本的編輯人員覆蓋了第一個(gè)編輯人員所做的更改。如果在第一個(gè)編輯人員完成之后第二個(gè)編輯人員才能進(jìn)行更改,則可以避免該問題。并發(fā)與事務(wù)>并發(fā)>未確認(rèn)的相關(guān)性未確認(rèn)的相關(guān)性(臟讀):當(dāng)?shù)诙€(gè)事務(wù)選擇其它事務(wù)正在更新的行時(shí),會(huì)發(fā)生未確認(rèn)的相關(guān)性問題。第二個(gè)事務(wù)正在讀取的數(shù)據(jù)還沒有確認(rèn)并且可能由更新此行的事務(wù)所更改。例如:一個(gè)編輯人員正在更改電子文檔。在更改過程中,另一個(gè)編輯人員復(fù)制了該文檔(該復(fù)本包含到目前為止所做的全部更改)并將其分發(fā)給預(yù)期的用戶。此后,第一個(gè)編輯人員認(rèn)為目前所做的更改是錯(cuò)誤的,于是刪除了所做的編輯并保存了文檔。分發(fā)給用戶的文檔包含不再存在的編輯內(nèi)容,并且這些編輯內(nèi)容應(yīng)認(rèn)為從未存在過。如果在第一個(gè)編輯人員確定最終更改前任何人都不能讀取更改的文檔,則可以避免該問題。并發(fā)與事務(wù)>并發(fā)>不一致的分析不一致的分析(非重復(fù)讀):當(dāng)?shù)诙€(gè)事務(wù)多次訪問同一行而且每次讀取不同的數(shù)據(jù)時(shí),會(huì)發(fā)生不一致的分析問題。不一致的分析與未確認(rèn)的相關(guān)性類似,因?yàn)槠渌聞?wù)也是正在更改第二個(gè)事務(wù)正在讀取的數(shù)據(jù)。然而,在不一致的分析中,第二個(gè)事務(wù)讀取的數(shù)據(jù)是由已進(jìn)行了更改的事務(wù)提交的。而且,不一致的分析涉及多次(兩次或更多)讀取同一行,而且每次信息都由其它事務(wù)更改;因而該行被非重復(fù)讀取。例如:一個(gè)編輯人員兩次讀取同一文檔,但在兩次讀取之間,作者重寫了該文檔。當(dāng)編輯人員第二次讀取文檔時(shí),文檔已更改。原始讀取不可重復(fù)。如果只有在作者全部完成編寫后編輯人員才可以讀取文檔,則可以避免該問題。并發(fā)與事務(wù)>并發(fā)>幻想讀幻像讀:當(dāng)對(duì)某行執(zhí)行插入或刪除操作,而該行屬于某個(gè)事務(wù)正讀取的行的范圍時(shí),會(huì)發(fā)生幻像讀問題。事務(wù)第一次讀的行范圍顯示出其中一行已不復(fù)存在于第二次讀或后續(xù)讀中,因?yàn)樵撔幸驯黄渌聞?wù)刪除。同樣,由于其它事務(wù)的插入操作,事務(wù)的第二次或后續(xù)讀顯示有一行已不存在于原始讀中。例如:一個(gè)編輯人員更改作者提交的文檔,但當(dāng)生產(chǎn)部門將其更改內(nèi)容合并到該文檔的主復(fù)本時(shí),發(fā)現(xiàn)作者已將未編輯的新材料添加到該文檔中。如果在編輯人員和生產(chǎn)部門完成對(duì)原始文檔的處理之前,任何人都不能將新材料添加到文檔中,則可以避免該問題。并發(fā)與事務(wù)隔離級(jí)別和鎖行版本控制(2005)死鎖與解鎖隔離級(jí)別與鎖>隔離級(jí)別1.隔離級(jí)別:控制隔離數(shù)據(jù)以供一個(gè)進(jìn)程使用并防止其它進(jìn)程干擾的程度的事務(wù)屬性。為在并發(fā)性能與并發(fā)問題間尋找一個(gè)最佳的平衡,隔離屬性分為不同級(jí)別,數(shù)據(jù)庫通過不同的隔離級(jí)別控制并發(fā)引起的問題:

類別

隔離級(jí)別1)未提交讀READUNCOMMITTED低2)已提交讀READCOMMITTED3)可重復(fù)讀REPEATABLEREAD4)可序列化SERIALIZABLE高隔離級(jí)別與鎖>隔離級(jí)別不同隔離級(jí)別對(duì)應(yīng)的并發(fā)問題處理:隔離級(jí)別臟讀不可重復(fù)讀幻想讀說明1.未提交讀可可可包含未提交數(shù)據(jù)的讀2.已提交讀*否可可讀取提交過的數(shù)據(jù),否則等待3.可重復(fù)讀否否可查詢期間,不允許其他事務(wù)對(duì)本結(jié)果集update4.可序列化否否否查詢期間,不允許其他事務(wù)對(duì)本結(jié)果集insert或delete隔離級(jí)別與鎖>隔離級(jí)別>未提交讀EX:未提交讀:(臟讀、不可重復(fù)讀、幻想讀)意義:包含未提交數(shù)據(jù)的讀。例如,在多用戶環(huán)境下,用戶B更改了某行。用戶A在用戶B提交更改之前讀取已更改的行。如果此時(shí)用戶B再回滾更改,則用戶A便讀取了邏輯上從未存在過的行。(如圖演示)演示:1)用戶B:BEGINTRANUPDATECOUPON_ABNORSETMSG_FLG=1WHERECONTENT_ID=4612)用戶A:SETTRANSACTIONISOLATIONLEVELREADUNCOMMITTED(此句不寫即默認(rèn)為READCOMMITTED模式)SELECTMSG_FLGFROMCOUPON_ABNORWHERECONTENT_ID=461(此時(shí)將查到值為1)3)用戶B:ROLLBACK(此時(shí)撤消了步驟1的UPDATE操作,則用戶A讀到的錯(cuò)誤數(shù)據(jù)被稱為臟讀)隔離級(jí)別與鎖>隔離級(jí)別>可提交讀EX:提交讀:(臟讀、不可重復(fù)讀●、幻想讀●)[“●”可以]意義:指定在讀取數(shù)據(jù)時(shí)(控制共享鎖)以避免臟讀。此隔離等級(jí)的主要作用是避免臟讀。演示:1.不可臟讀1)用戶B:BEGINTRANUPDATECOUPON_ABNORSETMSG_FLG=1WHERECONTENT_ID=4612)用戶A:SETTRANSACTIONISOLATIONLEVELREADCOMMITTEDSELECTMSG_FLGFROMCOUPON_ABNORWHERECONTENT_ID=461(上句設(shè)置了提交讀模式,則此

時(shí)將會(huì)查不到數(shù)據(jù),顯示查詢等待中,直到用戶B進(jìn)行了ROLLBACK或者COMMIT操作后,此語句才

會(huì)生效)3)用戶B:COMMIT4)用戶A:

查詢出結(jié)果隔離級(jí)別與鎖>隔離級(jí)別>可重復(fù)讀EX:可重復(fù)讀:意義:在多用戶環(huán)境下,用戶A開了一個(gè)事務(wù),并且先對(duì)test表的某條記錄做了查詢(select*fromtestwherename=‘AA’),接著用戶B對(duì)test表做了更新并提交(updatetestsetage=25wherename=’AA’),這時(shí)A再去查test表中的這條記錄,第一次讀到的age值為12,第二次為25,兩次讀到的數(shù)據(jù)不一樣,稱之為非重復(fù)讀。演示:1)用戶A:SETTRANSACTIONISOLATIONLEVELREPEATABLEREADBEGINTRANSELECTMSG_FLGFROMCOUPON_ABNORWHERECONTENT_ID=4612)用戶B:UPDATECOUPON_ABNORSETMSG_FLG=1WHERECONTENT_ID=461(等待中)3)用戶A:COMMITTRANSACTION4)用戶BUPDATE成功隔離級(jí)別與鎖>隔離級(jí)別>可序列化EX:可序列化:意義:在多用戶環(huán)境下,用戶A開啟了一個(gè)事務(wù),并查詢test表中的所有記錄,然后用戶B在自己的事務(wù)中插入(或刪除)了test表中的一條記錄并提交事務(wù),此時(shí)用戶A再去執(zhí)行前面的查詢整張表記錄的操作,結(jié)果會(huì)多出(少了)一條記錄,此操作稱之為幻象。(如圖演示)演示:1)用戶A:SETTRANSACTIONISOLATIONLEVELSERIALIZABLEBEGINTRANSELECTMSG_FLGFROMCOUPON_ABNORWHEREABNORCOUPON_ID='0000000000000000000'2)用戶B:INSERTINTOCOUPON_ABNOR(ABNORCOUPON_ID,RGST_ID,TIME_ORIGIN,ABNOR_CODE,STORE_ID,MSG_FLG)VALUES(‘0000000000000000000’,‘11’,getdate(),1,‘CS11’,0)--(等待中)3)用戶A:COMMITTRANSACTION隔離級(jí)別與鎖>隔離級(jí)別>小結(jié)1.未提交讀:主動(dòng)

增強(qiáng)自身讀能力2.提交讀:主動(dòng)降低自身讀能力3.可重復(fù)讀:主動(dòng)+被動(dòng)降低自身讀能力+增強(qiáng)事務(wù)自身保護(hù)力4.可序列化:主動(dòng)+被動(dòng)降低自身讀能力+增強(qiáng)事務(wù)自身保護(hù)力隔離級(jí)別與鎖>鎖做出了以上分析,現(xiàn)在我們可能會(huì)存在這樣的疑問,到底在執(zhí)行SQL語句的時(shí)候發(fā)出什么樣的鎖呢?這就由事務(wù)的隔離級(jí)別決定了。一

溫馨提示

  • 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)論