




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
./《數據庫原理》實驗報告題目:實驗七事務與并發(fā)控制學號姓名班級日期2013302478紀昌宇100113012015.11.14實驗七:事務與并發(fā)控制實驗目的掌握事務機制,學會創(chuàng)建事務。理解事務并發(fā)操作所可能導致的數據不一致性問題,用實驗展現(xiàn)四種數據不一致性問題:丟失修改、讀臟數據、不可重復讀以及幻讀現(xiàn)象。理解鎖機制,學會采用鎖與事務隔離級別解決數據不一致的問題。了解數據庫的事務日志。實驗內容假設學校允許學生將銀行卡和校園卡進行綁定,在student數據庫中有如下的基本表,其中校園卡編號cardid即為學生的學號: icbc_card<studcardid,icbcid,balance>//校園卡ID,工行卡ID,銀行卡余額campus_card<studcardid,balance>//校園卡ID,校園卡余額數據創(chuàng)建的代碼:usestudentcreatetablecampus_card<studcardidChar<8>,balanceDecimal<10,2>>createtableicbc_card<studcardidChar<8>,icbcidChar<10>,balanceDecimal<10,2>>insertintocampus_cardvalues<'20150031',30>insertintocampus_cardvalues<'20150032',50>insertintocampus_cardvalues<'20150033',70>insertintoicbc_cardvalues<'20150031','2015003101',1000>insertintoicbc_cardvalues<'20150032','2015003201',1000>insertintoicbc_cardvalues<'20150033','2015003301',1000>針對以上數據庫按照要求完成下列實驗:編寫一個事務處理<begintran>實現(xiàn)如下的操作:某學號為20150032的學生要從銀行卡中轉賬200元到校園卡中,若中間出現(xiàn)故障則進行rollback?!?5分settransactionisolationlevelrepeatablereadbegintransactionusestudentgodeclare@xdecimal<10,2>select@x=balancefromicbc_cardwherestudcardid='20150032'set@x=@x-200if<@x>=0>beginupdateicbc_cardsetbalance=@xwherestudcardid='20150032'updatecampus_cardsetbalance=balance+200wherestudcardid='20150032'committranendelsebeginprint'余額不足,不能轉賬'rollbacktranend針對本題的數據庫和表,分別用具體的例子展現(xiàn)四種數據不一致問題:丟失修改、讀臟數據、不可重復讀和幻讀<刪除和插入>。〔40分,每種數據不一致10分<1>.丟失修改--事務1begintrandeclare@balancedecimal<10,2>select@balance=balancefromcampus_cardwherestudcardid='20150033'waitfordelay'00:00:05'set@balance=@balance-10updatecampus_cardsetbalance=@balancewherestudcardid='20150033'committrangoselectbalancefromcampus_cardwherestudcardid='20150033'--事務2begintrandeclare@balance1decimal<10,2>select@balance1=balancefromcampus_cardwherestudcardid='20150033'waitfordelay'00:00:05'set@balance1=@balance1-20updatecampus_cardsetbalance=@balance1wherestudcardid='20150033'committrangoselectbalancefromcampus_cardwherestudca[事務1]更改了數據,結果為60,但是沒有被讀到。最終[事務2]的結果50覆蓋了[事務1]的更改值,結果不是期望值40〔2.讀臟數據--事務1SETTRANSACTIONISOLATIONLEVELREADUNCOMMITTED--READUNCOMMITTED執(zhí)行臟讀,不發(fā)出共享鎖,也不接受排他鎖begintrandeclare@balancedecimal<10,2>select@balance=balancefromcampus_cardwherestudcardid='20150032'updatecampus_cardsetbalance=@balance+100wherestudcardid='20150032'waitfordelay'00:00:05'rollbacktran--回滾goselectbalancefromcampus_cardwherestudcardid='20150032'--事務2SETTRANSACTIONISOLATIONLEVELREADUNCOMMITTEDbegintrandeclare@balancedecimal<10,2>select@balance=balancefromcampus_cardwherestudcardid='20150032'updatecampus_cardsetbalance=@balance+50wherestudcardid='20150032'committrangoselectbalancefromcampus_cardwherestudcardid='20150032'[事務1]更改了數據,[事務2]讀取了表中更改后的值再進行操作,[事務1]回滾。最終的表存儲了錯誤結果?!?不可重復讀--事務1SETTRANSACTIONISOLATIONLEVELREADCOMMITTEDbegintranselectbalancefromcampus_cardwherestudcardid='20150031'waitfordelay'00:00:05'selectbalancefromcampus_cardwherestudcardid='20150031'committran--事務2SETTRANSACTIONISOLATIONLEVELREADCOMMITTEDbegintranupdatecampus_cardsetbalance=balance+200wherestudcardid='20150031'committran[事務1]讀取了數據,[事務2]更改數據,[事務1]再讀取數據。[事務1]兩次讀取都不一樣!〔4.幻讀插入--事務1SETTRANSACTIONISOLATIONLEVELREADCOMMITTEDbegintranselectbalancefromcampus_cardwherestudcardid='20150031'waitfordelay'00:00:05'selectbalancefromcampus_cardwherestudcardid='20150031'committran--事務2SETTRANSACTIONISOLATIONLEVELSERIALIZABLEbegintraninsertintocampus_cardvalues<'20150031',30>committran刪除--事務1SETTRANSACTIONISOLATIONLEVELREADCOMMITTEDbegintranselectbalancefromcampus_cardwherestudcardid='20150031'waitfordelay'00:00:05'selectbalancefromcampus_cardwherestudcardid='20150031'committran--事務2settranisolationlevelrepeatablereadbegintrandeletefromcampus_cardwherestudcardid='20150031'committran利用鎖機制、數據庫的隔離級別等,設計方案分別解決上述丟失修改、讀臟數據和不可重復讀<或者幻讀>的數據不一致問題?!?0分,每種數據不一致10分,提示可以用sp_lock系統(tǒng)存儲過程查看當前鎖狀況修改隔離級別以卻確定數據的正確性:丟失修改,在SQL語句前加未提交讀:settranisolationlevelreaduncommitted讀臟數據,在SQL語句前已提交讀:settranisolationlevelreadcommitted不可重復讀,在SQL語句前可重復讀:settranisolationlevelrepeatableread幻讀在SQL語句前加可串行讀:settranisolationlevelserializable構造一個出現(xiàn)死鎖的情形。〔10分首先將鎖的級別改為提交可讀settranisolationlevelreadcommitted--事務1begintrandeclare@readintselect@read=gradefromscwheresno='95003'waitfordela
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 獨特視角的稅務師考試試題及答案
- 春考語文試題及答案解析
- 梳理2025年公共營養(yǎng)師考試難點試題及答案
- 深入刻畫西醫(yī)臨床重難點試題及答案
- 2024年圖書管理員行業(yè)規(guī)范試題及答案
- 教師資格筆試的文化意識與自我認知試題及答案
- 2025年公共衛(wèi)生執(zhí)業(yè)醫(yī)師考試復習習慣試題及答案
- 心理咨詢師考試倫理規(guī)范試題及答案
- 生活監(jiān)督面試題及答案
- 汽車特種考試題及答案
- 公司事故隱患內部報告獎勵制度
- 大學生創(chuàng)新創(chuàng)業(yè)基礎(創(chuàng)新創(chuàng)業(yè)課程)完整全套教學課件
- 創(chuàng)業(yè)思維-創(chuàng)造你喜愛的人生智慧樹知到期末考試答案章節(jié)答案2024年浙江旅游職業(yè)學院
- 100道湊十法練習習題
- 人教版初中階段語文古詩詞理解性背誦默寫匯編
- 內蒙古高中畢業(yè)生學籍表畢業(yè)生登記表學年評語表成績單身體健康檢查表完整版高中檔案文件
- 光電效應和普朗克常數測定實驗數據表格
- 重力式橋臺計算程序表格
- (完整word版)清表施工方案
- 污水池防腐施工方案改
- 公務用車派車單、車輛維修保養(yǎng)申請單(修訂版)
評論
0/150
提交評論