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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

數(shù)據(jù)庫

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

類別

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

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

會生效)3)用戶B:COMMIT4)用戶A:

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

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

溫馨提示

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

評論

0/150

提交評論