第七章 數據庫事務管理(1)_第1頁
第七章 數據庫事務管理(1)_第2頁
第七章 數據庫事務管理(1)_第3頁
第七章 數據庫事務管理(1)_第4頁
第七章 數據庫事務管理(1)_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第七章第七章 數據庫事務管理數據庫事務管理z7.1 事務與事務管理事務與事務管理 7.1.1 事務概念與性質事務概念與性質 7.1.2 事務操作與狀態(tài)事務操作與狀態(tài) 7.1.3 SQL事務機制事務機制z7.2 并發(fā)控制技術并發(fā)控制技術z7.3 數據庫故障恢復數據庫故障恢復Thinkingz 選修表的外部鍵選修表的外部鍵學號學號引用了學生表的主鍵,參照動作引用了學生表的主鍵,參照動作為為RESTRICT。z 則以下語句最終刪除了幾條記錄?則以下語句最終刪除了幾條記錄?學生學生學學 號號姓姓 名名性別性別年級年級201204王小明王小明男男2012201206張艷張艷女女2012201208黃大鵬

2、黃大鵬男男2012201312劉芳劉芳女女2013201326李蘭秋李蘭秋女女2013選修選修學學 號號課程號課程號成績成績201208H3035NULLDelete From 學生學生 Where 年級年級=2012事務概念事務概念z事務定義事務定義v事務是事務是DBMS的基本執(zhí)行單位,由一序列的數的基本執(zhí)行單位,由一序列的數據庫訪問和修改操作組成。這些操作要么全做,據庫訪問和修改操作組成。這些操作要么全做,要么全不做,是一個不可分割的整體。要么全不做,是一個不可分割的整體。 w例如銀行轉帳事務由兩個操作組成:例如銀行轉帳事務由兩個操作組成: 轉出帳戶轉出帳戶A 減去某一金額(減去某一金額(

3、A=A?) 轉入帳戶轉入帳戶B 增加相同金額(增加相同金額(B=B + ?) 這兩個操作放在同一個事務里完成,要么全做,這兩個操作放在同一個事務里完成,要么全做,要么全不做。要么全不做。事務的事務的ACID性質性質z原子性原子性 (Atomicity)v事務中包含的所有操作事務中包含的所有操作(特指修改操作特指修改操作)要么全部做,要要么全部做,要么全不做。么全不做。w例如某個轉帳事務:對帳戶例如某個轉帳事務:對帳戶A扣除扣除100,對帳戶,對帳戶B增增加加100。這兩個操作要么全做,要么全不做。這兩個操作要么全做,要么全不做v原子性由原子性由恢復機制恢復機制(7.3)實現實現事務的事務的AC

4、ID性質性質z一致性一致性(Consistency)v單獨執(zhí)行一個事務(無其它事務同時并發(fā)執(zhí)行)的結單獨執(zhí)行一個事務(無其它事務同時并發(fā)執(zhí)行)的結果必須保證數據一致性。即事務開始前,數據滿足一果必須保證數據一致性。即事務開始前,數據滿足一致性要求;事務結束后,數據雖然可能被修改了,但致性要求;事務結束后,數據雖然可能被修改了,但仍然滿足一致性的要求。仍然滿足一致性的要求。w這里數據一致性要求,根據具體應用而定。這里數據一致性要求,根據具體應用而定。例如在銀行系統中,轉帳事務的一致性要求是前后例如在銀行系統中,轉帳事務的一致性要求是前后兩個帳戶的金額總和不變。假如一個事務為帳戶兩個帳戶的金額總和

5、不變。假如一個事務為帳戶A減減去去100,為帳戶,為帳戶B加上加上50,那么這個事務就違反了一,那么這個事務就違反了一致性。致性。事務的事務的ACID性質性質v保證單個事務的一致性,由編寫事務的應用程序員來保證單個事務的一致性,由編寫事務的應用程序員來負責,并借助負責,并借助完整性機制完整性機制(6.3)來協助實現。來協助實現。w也就是說,如果有數據一致性要求(例如轉賬前后總和也就是說,如果有數據一致性要求(例如轉賬前后總和不變)不變) ,可以將其定義成某些完整性規(guī)則。,可以將其定義成某些完整性規(guī)則。事務的事務的ACID性質性質z隔離性隔離性 (Isolation)v多個事務在并發(fā)執(zhí)行時不會相

6、互影響,好像它們是隔離開來多個事務在并發(fā)執(zhí)行時不會相互影響,好像它們是隔離開來的一樣。最后的效果,與按某個順序依次執(zhí)行這些事務是一的一樣。最后的效果,與按某個順序依次執(zhí)行這些事務是一樣的。樣的。v隔離性要求一個事務,隔離性要求一個事務,不會看到另一事務的中間結果不會看到另一事務的中間結果。w例如一個事務例如一個事務T1讀取的數據,讀取的數據,一部分是一部分是事務事務T2修改前修改前的數據,的數據,一部分是一部分是事務事務T2修改后修改后的數據,這就違反了隔離性,并可能的數據,這就違反了隔離性,并可能導致數據錯誤。導致數據錯誤。w兩個數據兩個數據 A=a1, B=b1 事務事務T2發(fā)生發(fā)生 A=

7、a2, B=b2事務事務T1讀讀 A=a1, B=b1 正確正確 A=a2, B=b2 正確正確 A=a2, B=b1 錯誤錯誤 A=a1, B=b2 錯誤錯誤v隔離性通過隔離性通過并發(fā)控制機制并發(fā)控制機制(7.2)實現實現事務的事務的ACID性質性質z持久性持久性(Durability)v事務一旦提交,它對數據庫的影響就是永久性的。無事務一旦提交,它對數據庫的影響就是永久性的。無論發(fā)生什么事情,都不能取消這種影響。論發(fā)生什么事情,都不能取消這種影響。v例如一個事務將例如一個事務將50元從帳戶元從帳戶A轉到帳戶轉到帳戶B,此事務一旦,此事務一旦提交,這種交易是無法悔改的提交,這種交易是無法悔改

8、的即便發(fā)生故障,也即便發(fā)生故障,也不能把這不能把這50元元“還還”回去。回去。v持久性通過持久性通過恢復機制恢復機制(7.3)實現實現事務狀態(tài)與操作事務狀態(tài)與操作失敗狀態(tài)失敗狀態(tài)部分部分提交狀態(tài)提交狀態(tài)中止狀態(tài)中止狀態(tài)活動狀態(tài)活動狀態(tài)執(zhí)行執(zhí)行執(zhí)行全部執(zhí)行全部語句成功語句成功提交提交提交完畢提交完畢回滾回滾回滾完畢回滾完畢執(zhí)行某個執(zhí)行某個語句失敗語句失敗永久化信息永久化信息寫入失敗寫入失敗事務事務開始開始提交狀態(tài)提交狀態(tài)逐個語句逐個語句永久化每個修改(寫入到日志)永久化每個修改(寫入到日志)把數據改回舊值把數據改回舊值事務結束狀態(tài)之二事務結束狀態(tài)之二事務結束狀態(tài)之一事務結束狀態(tài)之一事務狀態(tài)與操作

9、事務狀態(tài)與操作z 活動狀態(tài)活動狀態(tài)v 事務開始后進入事務開始后進入v 事務處于本狀態(tài)時,依次執(zhí)行事務中的每條語句事務處于本狀態(tài)時,依次執(zhí)行事務中的每條語句z 部分提交狀態(tài)部分提交狀態(tài)(教材:局部提交狀態(tài)教材:局部提交狀態(tài))v 執(zhí)行完事務的全部語句后進入執(zhí)行完事務的全部語句后進入v 事務處于本狀態(tài)時,將已做的每個修改操作提交,即永久化寫入事務處于本狀態(tài)時,將已做的每個修改操作提交,即永久化寫入到日志中。這樣即使修改操作后來丟失了(例如數據庫崩潰),到日志中。這樣即使修改操作后來丟失了(例如數據庫崩潰),也能根據日志來恢復它也能根據日志來恢復它z 提交狀態(tài)提交狀態(tài)v提交完全部修改操作后進入提交完全

10、部修改操作后進入v事務處于本狀態(tài)時,事務結束。為事務的結束狀態(tài)之一事務處于本狀態(tài)時,事務結束。為事務的結束狀態(tài)之一事務狀態(tài)與操作事務狀態(tài)與操作z 失敗狀態(tài)失敗狀態(tài)v 在活動狀態(tài)中,執(zhí)行某條語句失敗時進入;或者在部分提交狀態(tài)在活動狀態(tài)中,執(zhí)行某條語句失敗時進入;或者在部分提交狀態(tài)中,提交永久化信息失敗時進入中,提交永久化信息失敗時進入v 事務處于本狀態(tài)時,不斷回滾已經發(fā)生的修改操作,即把數據改事務處于本狀態(tài)時,不斷回滾已經發(fā)生的修改操作,即把數據改成原來的舊值。成原來的舊值。z 中止狀態(tài)中止狀態(tài)v回滾全部修改操作后進入回滾全部修改操作后進入v事務處于本狀態(tài)時,事務結束。為事務的結束狀態(tài)之二事務處

11、于本狀態(tài)時,事務結束。為事務的結束狀態(tài)之二Thinkingz執(zhí)行一個事務時,可能經過哪些狀態(tài)序列執(zhí)行一個事務時,可能經過哪些狀態(tài)序列v活動狀態(tài)活動狀態(tài) 部分提交狀態(tài)部分提交狀態(tài) 提交狀態(tài)提交狀態(tài)v活動狀態(tài)活動狀態(tài) 失敗狀態(tài)失敗狀態(tài) 中止狀態(tài)中止狀態(tài)v活動狀態(tài)活動狀態(tài) 部分提交狀態(tài)部分提交狀態(tài) 失敗狀態(tài)失敗狀態(tài) 中止狀態(tài)中止狀態(tài)SQL中的事務中的事務z相關語句相關語句vBegin Transaction w開始事務開始事務vCommit (Transaction) w提交事務。此時事務正常結束,事務所做的修改操作都提交事務。此時事務正常結束,事務所做的修改操作都有效且有效且永久地永久地寫入數據庫

12、寫入數據庫vRollback (Transaction) w回滾事務。此時事務非正常結束,事務所做的修改操作回滾事務。此時事務非正常結束,事務所做的修改操作都無效且必須都無效且必須撤銷撤銷(Undo,數據改回舊值,數據改回舊值)。w回滾后,數據庫回退到事務開始前的狀態(tài),就好像事務回滾后,數據庫回退到事務開始前的狀態(tài),就好像事務從來沒有發(fā)生過一樣。從來沒有發(fā)生過一樣。SQL中的事務中的事務z兩種說明方式兩種說明方式v事務的顯式方式事務的顯式方式w用戶明確說明一個事務的開始(用戶明確說明一個事務的開始(Begin Transaction語句)語句)和結束(用和結束(用Commit/Rollback

13、語句)。語句)。v事務的隱式方式事務的隱式方式w不需明確說明一個事務的開始(有時也不說明結束)不需明確說明一個事務的開始(有時也不說明結束)比如從第一個有效的比如從第一個有效的DML語句開始事務。語句開始事務。遇到明確的遇到明確的Commit/Rollback結束一個事務。結束一個事務。遇到遇到Create Table、Drop Table、Create View,Create Index等等DDL語句,語句, (提交上一個事務后)啟動一個新的(提交上一個事務后)啟動一個新的事務。事務。SQL中的事務中的事務z注意注意v事務沒有執(zhí)行完事務沒有執(zhí)行完Commit之前,因某種原因(故障)而之前,因

14、某種原因(故障)而終止了,那么系統就會自動地回滾這個事務。終止了,那么系統就會自動地回滾這個事務。v判斷判斷SQL語句屬于哪個事務語句屬于哪個事務( SQL SERVER中,默認顯式事務下中,默認顯式事務下)w如果如果SQL語句處于某個事務的語句處于某個事務的Begin transaction和和Commit/Rollback之間,那么它就屬于這個事務。之間,那么它就屬于這個事務。w如果以上不成立,那么這個如果以上不成立,那么這個SQL語句本身構成一個獨立語句本身構成一個獨立的事務。的事務。Thinkingz下面的下面的SQL Server程序包含幾個事務程序包含幾個事務? z思考,如果執(zhí)行完

15、第一個思考,如果執(zhí)行完第一個update語句之后、沒有語句之后、沒有執(zhí)行第二個執(zhí)行第二個update語句之前,系統斷電。那么在語句之前,系統斷電。那么在重啟以后,兩個帳戶的金額會發(fā)生什么樣的變化重啟以后,兩個帳戶的金額會發(fā)生什么樣的變化?Begin Transaction Update account set money= money 50 where no=AUpdate account set money= money 50 where no=BCommitThinkingz下面的下面的SQL Server程序包含幾個事務程序包含幾個事務? z思考,如果執(zhí)行完第一個思考,如果執(zhí)行完第一個u

16、pdate語句之后、沒有語句之后、沒有執(zhí)行第二個執(zhí)行第二個update語句之前,系統斷電。那么在語句之前,系統斷電。那么在重啟以后,兩個帳戶的金額會發(fā)生什么樣的變化重啟以后,兩個帳戶的金額會發(fā)生什么樣的變化?Update account set money= money 50 where no=AUpdate account set money= money 50 where no=BThinkingz 選修表的外部鍵選修表的外部鍵學號學號引用了學生表的主鍵,參照動作引用了學生表的主鍵,參照動作為為RESTRICT。z 則以下語句最終刪除了幾條記錄?則以下語句最終刪除了幾條記錄?學生學生學學

17、號號姓姓 名名性別性別年級年級201204王小明王小明男男2012201206張艷張艷女女2012201208黃大鵬黃大鵬男男2012201312劉芳劉芳女女2013201326李蘭秋李蘭秋女女2013選修選修學學 號號課程號課程號成績成績201208H3035NULLDelete From 學生學生 Where 年級年級=2012目錄目錄z7.1 事務與事務管理事務與事務管理z7.2 并發(fā)控制技術并發(fā)控制技術 7.2.1 事務并發(fā)執(zhí)行事務并發(fā)執(zhí)行 7.2.2 并發(fā)引起不一致問題并發(fā)引起不一致問題 7.2.3 并發(fā)執(zhí)行正確性準則概述并發(fā)執(zhí)行正確性準則概述 7.2.4 并發(fā)控制基本技術并發(fā)控制基

18、本技術 7.2.5 封鎖協議封鎖協議 7.2.6 活鎖與死鎖活鎖與死鎖 7.2.7 多粒度封鎖多粒度封鎖z7.3 數據庫故障恢復數據庫故障恢復兩種事務調度兩種事務調度z事務調度事務調度v系統以什么時間順序執(zhí)行系統以什么時間順序執(zhí)行(進入系統的)(進入系統的)一組事務一組事務/ /事事務的指令務的指令w雖然在微觀上,這組事務是先后到達系統的,但宏觀上雖然在微觀上,這組事務是先后到達系統的,但宏觀上可能是可能是“同時同時”到達系統:即上一個事務還沒結束時,到達系統:即上一個事務還沒結束時,下一個事務又進入了系統。下一個事務又進入了系統。兩種事務調度兩種事務調度z串行調度串行調度(教材:串行執(zhí)行教材

19、:串行執(zhí)行) v當前一個事務完全結束后,下一個事務才開始執(zhí)行。當前一個事務完全結束后,下一個事務才開始執(zhí)行。v特點:從時間順序看,同一事務的指令緊挨在一起。特點:從時間順序看,同一事務的指令緊挨在一起。z并發(fā)調度并發(fā)調度(教材:并發(fā)執(zhí)行教材:并發(fā)執(zhí)行) v未執(zhí)行完一個事務,可轉去執(zhí)行另一事務。未執(zhí)行完一個事務,可轉去執(zhí)行另一事務。w事務的執(zhí)行時間重疊,宏觀上多個事務同時執(zhí)行,微觀事務的執(zhí)行時間重疊,宏觀上多個事務同時執(zhí)行,微觀上這些事務交叉或者說分時執(zhí)行上這些事務交叉或者說分時執(zhí)行。v特點:從時間順序看,不同事務的指令彼此交叉。特點:從時間順序看,不同事務的指令彼此交叉。并發(fā)調度的優(yōu)勢并發(fā)調度

20、的優(yōu)勢z并發(fā)調度并發(fā)調度 VS 串行調度串行調度v不同事務的不同指令,涉及的系統資源也不同。同時不同事務的不同指令,涉及的系統資源也不同。同時執(zhí)行這些指令,執(zhí)行這些指令,可以提高可以提高資源利用率資源利用率和和系統吞吐量系統吞吐量w例如,事務例如,事務A和事務和事務B,都由指令都由指令1(要求要求CPU計算計算)和指令和指令2(要求要求I/O)組成。組成。CPU和和I/O設備是可以并行工作的,所設備是可以并行工作的,所以并發(fā)執(zhí)行事務以并發(fā)執(zhí)行事務A的指令的指令2和事務和事務B的指令的指令1時,可以避免時,可以避免資源閑置和縮短總執(zhí)行時間。資源閑置和縮短總執(zhí)行時間。并發(fā)調度的優(yōu)勢并發(fā)調度的優(yōu)勢v

21、系統中存在著周期不等的各種事務,串行調度導致短系統中存在著周期不等的各種事務,串行調度導致短事務可能要等待長事務的完成。而采用并發(fā)調度,靈事務可能要等待長事務的完成。而采用并發(fā)調度,靈活決定事務的執(zhí)行順序,活決定事務的執(zhí)行順序,可以減少可以減少平均響應時間平均響應時間w例如,需時為例如,需時為10分鐘的事務分鐘的事務A開始開始2分鐘后,需時為分鐘后,需時為1分分鐘的事務鐘的事務B進入系統。對于串行調度,等待事務進入系統。對于串行調度,等待事務A完成后完成后才能執(zhí)行事務才能執(zhí)行事務B;對于并發(fā)調度,可以立刻轉去執(zhí)行事對于并發(fā)調度,可以立刻轉去執(zhí)行事務務B,再回頭執(zhí)行事務,再回頭執(zhí)行事務Aw思考:

22、比較兩者的平均響應時間思考:比較兩者的平均響應時間? 響應時間響應時間事務進入事務進入系統到事務完成的時間差事務等待的時間系統到事務完成的時間差事務等待的時間+事務執(zhí)行的事務執(zhí)行的時間時間事務調度例子事務調度例子z事務的表示事務的表示T:read(A);A := A 50;write(A);read(B);B := B + 50;write(B);vread(X): 把數據把數據X從從數據庫數據庫讀出到事務的讀出到事務的私有緩沖私有緩沖中中vwrite(X): 把數據把數據X從事務的從事務的私有緩沖私有緩沖中寫回到中寫回到數據庫數據庫帳戶帳戶A減去減去50帳戶帳戶B加上加上50事務調度例子事務

23、調度例子z數據一致性要求:數據一致性要求:A、B總和不變總和不變v思考:事務思考:事務T1、T2是否具有一致性是否具有一致性?事務事務T1read(A);A := A 100;write(A);read(B);B := B + 100;write(B);從從A轉帳轉帳100到到B從從A轉帳轉帳200到到B事務事務T2read(A);A := A 200;write(A);read(B);B := B + 200;write(B);開始狀態(tài)開始狀態(tài)A=1000B= 0事務調度例子事務調度例子z串行調度串行調度1v調度的結果是否保證調度的結果是否保證了數據一致性了數據一致性? read(A); A

24、 := A 100; write(A); read(B); B := B +100; write(B); read(A); A := A 200; write(A); read(B); B := B + 200; write(B);T1T2A=900B=100結束狀態(tài)結束狀態(tài)A=700B=300開始狀態(tài)開始狀態(tài)A=1000B= 0開始狀態(tài)開始狀態(tài)A=1000B= 0事務調度例子事務調度例子z串行調度串行調度2v調度的結果是否保證調度的結果是否保證了數據一致性了數據一致性?v思考:所有串行調度都思考:所有串行調度都能保證數據一致性嗎?能保證數據一致性嗎? read(A); A := A 100;

25、 write(A); read(B); B := B +100; write(B); read(A); A := A 200; write(A); read(B); B := B + 200; write(B);T1T2A=800B=200結束狀態(tài)結束狀態(tài)A=700B=300事務調度例子事務調度例子z并發(fā)調度并發(fā)調度1v調度的結果是否保證調度的結果是否保證了數據一致性了數據一致性?v思考:思考:T1、T2讀寫的是讀寫的是對方修改前對方修改前/后的數據?后的數據? read(B); B := B +100; write(B); read(A); A := A 200; write(A); T1T

26、2A=700B= 0結束狀態(tài)結束狀態(tài)A=700B=300 read(B); B := B + 200; write(B); read(A); A := A 100; write(A);A=800B= 0A=700B=200事務調度例子事務調度例子z并發(fā)調度并發(fā)調度2v調度的結果是否保證調度的結果是否保證了數據一致性了數據一致性?v思考:思考:T1、T2讀寫的是讀寫的是對方修改前對方修改前/后的數據?后的數據? read(B); B := B +100; write(B); read(A); A := A 200;T1T2A=900B= 0結束狀態(tài)結束狀態(tài)A=800B=300 write(A);

27、 read(B); B := B + 200; write(B); read(A); A := A 100; write(A);A=1000B= 0A=800B=200小結小結z保證單個事務一致性的情況下,保證單個事務一致性的情況下,v多個事務串行調度時,不會破壞數據一致性。多個事務串行調度時,不會破壞數據一致性。v多個事務并發(fā)調度時,可能會、也可能不會破壞數據多個事務并發(fā)調度時,可能會、也可能不會破壞數據一致性。一致性。w取決于并發(fā)調度有否違反隔離性。取決于并發(fā)調度有否違反隔離性。并發(fā)調度的問題并發(fā)調度的問題z并發(fā)調度的問題:可能破壞數據一致性并發(fā)調度的問題:可能破壞數據一致性v即使單個事務

28、的執(zhí)行不會破壞數據一致性,多個這樣即使單個事務的執(zhí)行不會破壞數據一致性,多個這樣的事務在并發(fā)調度時,也可能破壞數據一致性。的事務在并發(fā)調度時,也可能破壞數據一致性。z產生問題的原因產生問題的原因: 事務隔離性未得到保證事務隔離性未得到保證v隔離性要求事務隔離性要求事務T1不能看到另一個事務不能看到另一個事務T2的中間結果的中間結果(一部分數據是修改前的,一部分數據是修改后的)(一部分數據是修改前的,一部分數據是修改后的)v但在并發(fā)執(zhí)行的情況下,有時沒有做到這一點但在并發(fā)執(zhí)行的情況下,有時沒有做到這一點z解決方法(解決方法(正確性準則正確性準則): 使并發(fā)調度使并發(fā)調度可串行化可串行化v事務的串

29、行調度顯然不會破壞數據一致性事務的串行調度顯然不會破壞數據一致性v如果事務的并發(fā)調度是可串行化的,如果事務的并發(fā)調度是可串行化的,即效果上等價于即效果上等價于某個串行調度時某個串行調度時,也不會破壞數據一致性,也不會破壞數據一致性再小結再小結z保證單個事務一致性的情況下,保證單個事務一致性的情況下,v任何串行調度,不會破壞數據一致性。任何串行調度,不會破壞數據一致性。v保證隔離性保證隔離性/可串行化的并發(fā)調度,也不會破壞數據一可串行化的并發(fā)調度,也不會破壞數據一致性。致性。v隔離性得不到保證隔離性得不到保證/不可串行化,可能會破壞數據一致不可串行化,可能會破壞數據一致性,產生錯誤。性,產生錯誤

30、。z接下來的問題接下來的問題v并發(fā)調度產生的錯誤有哪些?并發(fā)調度產生的錯誤有哪些?三類不一致性三類不一致性z我們把并發(fā)調度破壞數據一致性所產生的錯誤,我們把并發(fā)調度破壞數據一致性所產生的錯誤,又稱為數據不一致性。分為以下三種:又稱為數據不一致性。分為以下三種:v丟失修改丟失修改v不可重復讀不可重復讀v讀讀“臟臟”數據數據第一類:丟失修改第一類:丟失修改z丟失修改的產生丟失修改的產生v并發(fā)調度兩個事務并發(fā)調度兩個事務T1、T2。vT1與與T2從數據庫中讀入同一數據后分別修改。假設從數據庫中讀入同一數據后分別修改。假設T1先提交,而先提交,而T2后提交。后提交。v則則T2提交的修改覆蓋了提交的修改

31、覆蓋了T1提交的修改,導致提交的修改,導致T1的修的修改丟失。改丟失。第一類:丟失修改第一類:丟失修改z例子例子v事務事務T1: 賣出兩張機票;事務賣出兩張機票;事務T2:賣出一張機票:賣出一張機票事務事務T1read(A);A := A 2;write(A);事務事務T2read(A);A := A 1;write(A);起始狀態(tài)起始狀態(tài):A=10串行調度串行調度T1, T2:A=7; 串行調度串行調度T2, T1:A=7第一類:丟失修改第一類:丟失修改v丟失修改的并發(fā)調度丟失修改的并發(fā)調度A=8A=9T1和和T2讀入讀入同一數據同一數據A,T2提交的修提交的修改覆蓋了改覆蓋了T1提交的修改

32、,提交的修改,導致導致T1的修的修改丟失。改丟失。 read(A); A := A 1; write(A); read(A); A := A 2; write(A); T1T2開始開始A=10第二類:不可重復讀第二類:不可重復讀z不可重復讀的產生不可重復讀的產生v事務事務T1讀取某些數據(記錄)后,讀取某些數據(記錄)后,v事務事務T2對這些數據(記錄)做了對這些數據(記錄)做了某種修改操作某種修改操作v當當T1再次讀取該數據(記錄)時,得到的是與前一次再次讀取該數據(記錄)時,得到的是與前一次不同的值不同的值第二類:不可重復讀第二類:不可重復讀z不可重復讀的產生不可重復讀的產生v事務事務T1

33、讀取某些數據(記錄)后,讀取某些數據(記錄)后,v事務事務T2對這些數據(記錄)做了對這些數據(記錄)做了某種修改操作某種修改操作v當當T1再次讀取該數據(記錄)時,得到的是與前一次再次讀取該數據(記錄)時,得到的是與前一次不同的值不同的值第二類:不可重復讀第二類:不可重復讀z不可重復讀又分為三種情況不可重復讀又分為三種情況在事務在事務T1兩次讀取之間,兩次讀取之間,v另一事務另一事務T2更新更新了記錄。則當了記錄。則當T1第二次讀取時,得到第二次讀取時,得到與前一次不同的記錄值與前一次不同的記錄值v另一事務另一事務T2刪除刪除了部分記錄。則當了部分記錄。則當T1第二次讀取時,第二次讀取時,發(fā)

34、現其中的某些記錄神秘地消失了發(fā)現其中的某些記錄神秘地消失了v另一事務另一事務T2插入插入了一些記錄。則當了一些記錄。則當T1第二次按相同條第二次按相同條件讀取時,發(fā)現地神秘地多了一些記錄件讀取時,發(fā)現地神秘地多了一些記錄 (后兩種不可重復讀有時也稱為(后兩種不可重復讀有時也稱為幻影幻影現象)現象)第二類:不可重復讀第二類:不可重復讀z不可重復讀的例子不可重復讀的例子v事務事務T1: 讀取并打印存款,重復兩次;事務讀取并打印存款,重復兩次;事務T2:存款:存款100事務事務T2read(A);A = A + 100;write(A);事務事務T1read(A);print(A);read(A);

35、print(A);起始狀態(tài)起始狀態(tài):A=0¥串行調度串行調度T1、T2:A=100;打印打印100100串行調度串行調度T1、T2:A=100;打印打印100100第二類:不可重復讀第二類:不可重復讀v不可重復讀的并發(fā)調度不可重復讀的并發(fā)調度打印打印A? read(A); A := A + 100; write(A); T1T2 read(A); print(A); read(A); print(A);打印打印A ?事務事務T1讀取某讀取某一數據一數據A后,后,事務事務T2對其進對其進行了更新操作,行了更新操作,當當T1再次讀取再次讀取該數據時,得該數據時,得到與前次不同到與前次不同的值。的值

36、。第二類:不可重復讀第二類:不可重復讀z幻影的例子幻影的例子v事務事務T1: 查詢男生人數,重復兩次;事務查詢男生人數,重復兩次;事務T2:插入一:插入一條男生記錄。條男生記錄。事務事務T2Insert into 學生表學生表 (學號學號, 姓名姓名, 性別性別) Values (S5, 王平王平, 男男)事務事務T1Select Count(*)From 學生表學生表 Where 性別性別 = 男男Select Count(*) From 學生表學生表 Where 性別性別 = 男男串行調度串行調度T1、T2:兩次的男生人數相同兩次的男生人數相同串行調度串行調度T1、T2:兩次的男生人數相同兩次的男生人數相同(比左邊多(比左邊多1)第二類:不可重復讀第二類:不可重復讀v產生產生“幻影幻影”的并發(fā)調度的并發(fā)調度T1T2同一個事務中,同一個事務中,(條件)相同(條件)相同的兩次查詢,的兩次查詢,結果卻不同。結果卻不同。某些記錄神秘某些記錄神秘地出

溫馨提示

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

評論

0/150

提交評論