




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第11章數據庫事務本章目標理解事務的概念理解事務的特性、分類在SQLServer中啟動、提交和回滾事務掌握事務的隔離級別為什么需要事務事務能確保把對多個數據操作作為一個單元來處理例如:銀行轉帳問題:假設張三的銀行卡有2000元,李四的卡有1000元,共計3000元。現在張三要轉1000元給李四,則要更新張三的帳戶,減少余額1000元,更新李四帳戶余額,增加1000元。如果整個流程沒有出錯則最后張三余額1000元,李四2000元,共計3000元。數據和轉帳之前是一致的,假設在減少了張三的余額1000后,系統掉電或者出現意外李四的帳戶還沒完成更新。則最終的數據2000元,那怎么解決?事務的概念及特性事務提供了一種機制、是一個操作序列,它包含了一組數據庫操作命令,并且所有的命令作為一個整體一起向系統提交或撤消操作請求事務是作為單個邏輯工作單元執行的一系列操作事務的四個特性:原子性(Atomicity):事務能確保把對多個數據修改作為一個單元來處理,也就是原子操作。一致性(Consistency):當事務完成時,數據必須處于一致狀態隔離性(Isolation):對數據進行修改的所有并發事務是彼此隔離的。這表明事務必須是獨立的,它不應以任何方式依賴或影響其他事務持久性(Durability):當事務完成之后,它對于系統的影響是永久性的。事務的分類事務分類顯式事務隱性事務自動提交事務顯式事務:顯式事務是顯式地定義其開始和結束的事務
BEGINTRANSACTION…數據庫操作如:插入記錄
…數據庫操作如:刪除記錄COMMITTRANSACTION事務的分類隱性事務:通過Transact-SQL的SETIMPLICIT_TRANSACTIONSON語句,將隱性事務模式設置為打開。
SETIMPLICIT_TRANSACTIONSONGO/*第一次執行Insert語句的時候將自動啟動一個隱性事務*/INSERTINTOImpTranVALUES(1,'aaa')INSERTINTOImpTranVALUES(2,'bbb')GO/*提交第一個事務*/COMMITTRANSACTIONGO/*執行SELECT語句將啟動第二個隱性事務*/SELECTCOUNT(*)FROMImpTranGOINSERTINTOImpTranVALUES(3,'ccc')GOSELECT*FROMImpTranGO/*提交第二個事務*/COMMITTRANSACTIONGOSETIMPLICIT_TRANSACTIONSOFFGO事務的分類自動提交事務:所有Transact-SQL語句在完成時,都會提交或回滾。如果一條語句成功完成,則將其提交,如果遇到任何錯誤,則將其回滾;默認操作模式用T-SQL表示事務Transact-SQL使用下列語句來管理事務開始事務:BEGINTRANSACTION提交事務:COMMITTRANSACTION回滾(撤消)事務:ROLLBACKTRANSACTION下列變量在事務處理中非常有用。@@ERROR@@TRANCOUNT事務的應用示例:客戶購買圖書USEBookShopDbGO--一個客戶在銷售員編號為的用戶處購買了三種書,生成銷售記錄---SETNOCOUNTON--不顯示受影響的行數信息GOBEGINTRANSACTION--開始事務DECLARE@errINT--保存錯誤編號PRINT'客戶開始買書,事務開始'SET@err=0--插入銷售主表SalesMasterINSERTINTOSalesMasterVALUES(GETDATE(),'001')--聲明局部變量保存SalesMasterIDSET@err=@err+@@ERRORDECLARE@SalesMasterIDINT--獲取最新的SalesMasterIDSELECT@SalesMasterID=@@IDENTITY--購買三本書INSERTINTOSalesDetails
VALUES(@SalesMasterID,'B0001',1,0.9,45)SET@err=@err+@@ERRORINSERTINTOSalesDetails
VALUES(@SalesMasterID,'B0003',1,1,118)SET@err=@err+@@ERRORINSERTINTOSalesDetails
VALUES(@SalesMasterID,'B0004',2,0.8,28)SET@err=@err+@@ERROR--購買完成,根據錯誤編號決定是否執行成功IF@err=0BEGINPRINT'購買成功,事務結束'COMMITTRANSACTIONENDELSEBEGINROLLBACKTRANSACTIONPRINT'購買失敗,事務回滾'ENDGO事務的隔離級別事務的隔離級別是指一個事務必須和其他事務在進行資源或者數據更改時相隔離的程度較低的隔離級別可以增強許多用戶同時訪問數據的能力,但也增加了用戶可能遇到的并發副作用(例如臟讀或丟失更新)的數量。相反,較高的隔離級別減少了用戶可能遇到的并發副作用的類型,但需要更多的系統資源,并增加了一個事務阻塞其他事務的可能性SQLServer支持的隔離級別READUNCOMMITTED未提交讀(隔離事務的最低級別)READCOMMITTED已提交讀(數據庫引擎的默認級別)REPEATABLEREAD可重復讀SERIALIZABLE可序列化(隔離事務的最高級別,事務之間完全隔離)未提交讀--第一個事務USEBookShopDbGOSETTRANSACTIONISOLATIONLEVELREADUNCOMMITTED;GOBEGINTRANSACTIONGOSELECT*FROMpublisherWHEREPublisherID=1GOUPDATEPublisherSETPublisherName=PublisherName+'2'WHEREPublisherID=1GOSELECT*FROMpublisherWHEREPublisherID=1GOWAITFORDELAY'00:00:15'GOROLLBACKTRANSACTION;GOSELECT*FROMpublisherWHEREPublisherID=1GO--第二個事務USEBookShopDbGOSETTRANSACTIONISOLATIONLEVELREADUNCOMMITTED;GOBEGINTRANSACTIONGOSELECT*FROMpublisherWHEREPublisherID=1GOCOMMIT;GO可重復讀--第一個事務USEBookShopDbGOSETTRANSACTIONISOLATIONLEVELREPEATABLEREAD;GOBEGINTRANSACTIONGOSELECT*FROMpublisherWHEREPublisherID=1GOWAITFORDELAY'00:00:15'GOSELECT*FROMpublisherWHEREPublisherID=1GOCOMMITTRANSACTION;GO---第二個事務USEBookShopDbGOSETTRANSACTIONISOLATIONLEVELREPEATABLEREAD;GOBEGINTRANSACTIONGOSELECT*FROMpublisherWHEREPublisherID=1GOUPDATEPublisherSETPublisherName=PublisherName+'2'WHEREPublisherID=1GOSELECT*FROMpublisherWHEREPublisherID=1GOCOMMITTRANSACTION;SELECT*FROMpublisherWHEREPublisherID=1GO數據庫死鎖在數據庫的并發應用中,多個請求同時向數據庫發送請求,如果各個進程均占有不會釋放的資源,但因互相申請被其他進程所站用不會釋放的資源而處于的一種永久等待狀態。這種狀態就是常說的死鎖死鎖示例USEBookShopDbGOBEGINTRANSACTIONUPDATEPublisherSETPublisherName=PublisherName+'publisher'WHEREPublisherID=1WAITFORDELAY'00:00:20'SELECT*FROMcategoryROLLBACKTRANSACTION等待20秒之后顯示查詢結果:--第二個查詢USEBookShopDbGOBEGINTRANSACTIONUPDATEPublisherSETPublisherName=PublisherName+'publisher'WHEREPublisherID=1WAITFORDELAY'00:00:20'SELECT*FROMcategoryROLLBACKTRANSACTION等待20秒之后顯示查詢結果:死鎖解決方法1.SQLServer自動選擇一條SQL語句作犧牲品,我們會發現兩個查詢中第一個正常執行,第二個則拋出錯誤。2.按照同一順序訪問資源:調換查詢二中
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 知識管理在企業營銷中的應用探討
- 大理大學《商務英語寫作Ⅱ》2023-2024學年第一學期期末試卷
- 強化學習在智能醫療決策中的優化研究-洞察及研究
- 閩西職業技術學院《醫學機能學實驗(Ⅱ)》2023-2024學年第一學期期末試卷
- 動物模型代謝途徑-洞察及研究
- 2025年制造業供應鏈數字化協同與供應鏈管理創新體系構建案例研究
- 實驗室生物安全活動方案
- 小學師德建設活動方案
- 家長媽媽活動方案
- 小學儀式活動方案
- 2023+ESC急性冠狀動脈綜合征管理指南解讀 課件
- 心絞痛培訓課件
- 保險行業發展趨勢和機遇
- 注塑加工廠管理
- 邊坡作業安全教育培訓
- 《2025年CSCO腎癌診療指南》解讀
- 小學語文跨學科主題學習策略研究
- 2022-2023學年浙江省溫州市永嘉縣人教PEP版四年級下冊期末測試英語試卷
- 東盟經貿文化與習俗知到智慧樹章節測試課后答案2024年秋海南外國語職業學院
- 國家開放大學專科《社會調查研究與方法》期末紙質考試總題庫2025春期考試版
- 2024年設備監理師考試題庫及答案(歷年真題)
評論
0/150
提交評論