第14講 事務(wù)與觸發(fā)器_第1頁(yè)
第14講 事務(wù)與觸發(fā)器_第2頁(yè)
第14講 事務(wù)與觸發(fā)器_第3頁(yè)
第14講 事務(wù)與觸發(fā)器_第4頁(yè)
第14講 事務(wù)與觸發(fā)器_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、回顧回顧存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程(Procedure)的定義的定義輸入?yún)?shù)輸入?yún)?shù) 參數(shù)名參數(shù)名輸出參數(shù)輸出參數(shù) 參數(shù)名參數(shù)名 output執(zhí)行狀態(tài)值,執(zhí)行狀態(tài)值,0表示成功,表示成功,-99-1表示系統(tǒng)發(fā)現(xiàn)的執(zhí)行錯(cuò)表示系統(tǒng)發(fā)現(xiàn)的執(zhí)行錯(cuò)誤,其余的值表示自定義的錯(cuò)誤。誤,其余的值表示自定義的錯(cuò)誤。存儲(chǔ)過(guò)程的執(zhí)行存儲(chǔ)過(guò)程的執(zhí)行EXECUTE PROC 過(guò)程名過(guò)程名 參數(shù)參數(shù)output 思考:思考:余額表余額表(帳號(hào),余額帳號(hào),余額)“001”賬戶向賬戶向“002”賬戶轉(zhuǎn)賬戶轉(zhuǎn)X元,手續(xù)費(fèi)元,手續(xù)費(fèi)1%,需要完成如,需要完成如下下2項(xiàng)數(shù)據(jù)操作:項(xiàng)數(shù)據(jù)操作:操作操作1:001賬戶減賬戶減X*1.01,操作操

2、作2:002賬戶加賬戶加X(jué).完成以下完成以下存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程proc_轉(zhuǎn)帳轉(zhuǎn)帳,用于實(shí)現(xiàn)轉(zhuǎn)帳業(yè)務(wù)的數(shù)據(jù),用于實(shí)現(xiàn)轉(zhuǎn)帳業(yè)務(wù)的數(shù)據(jù)操作功能。操作功能。 CREATE PROC proc_轉(zhuǎn)帳轉(zhuǎn)帳 outId char(20), inId char(20), amout int AS -SQL 體體數(shù)據(jù)庫(kù)原理與應(yīng)用數(shù)據(jù)庫(kù)原理與應(yīng)用第第14講講 事務(wù)與觸發(fā)器事務(wù)與觸發(fā)器1. 事務(wù)事務(wù)關(guān)鍵詞關(guān)鍵詞: BEGIN TRAN, COMMIT TRAN,ROLLBACK TRAN10.5 10.5 事務(wù)處理事務(wù)處理事務(wù)事務(wù)(Transaction)是一個(gè)邏輯工作單元。單元中的所有操作要么全部成功,是一個(gè)邏輯工

3、作單元。單元中的所有操作要么全部成功,要么全部取消。要么全部取消。事務(wù)的必要性事務(wù)的必要性(1) 如果一個(gè)業(yè)務(wù)需要多個(gè)數(shù)據(jù)操作,而只有其中的部分如果一個(gè)業(yè)務(wù)需要多個(gè)數(shù)據(jù)操作,而只有其中的部分操作成功,則數(shù)據(jù)的操作成功,則數(shù)據(jù)的一致性將一致性將會(huì)被破壞。會(huì)被破壞。例如例如:銀行:銀行轉(zhuǎn)帳,至少需要兩項(xiàng)操作:甲賬戶扣除,乙賬戶增加,轉(zhuǎn)帳,至少需要兩項(xiàng)操作:甲賬戶扣除,乙賬戶增加,不允許只有一項(xiàng)操作成功,而另一項(xiàng)失敗。不允許只有一項(xiàng)操作成功,而另一項(xiàng)失敗。(2)導(dǎo)致錯(cuò)誤的原因可分為兩類:一是可以預(yù)見(jiàn)的邏輯錯(cuò)導(dǎo)致錯(cuò)誤的原因可分為兩類:一是可以預(yù)見(jiàn)的邏輯錯(cuò)誤,比如賬戶不存在,余額不足等。二是不可預(yù)見(jiàn)的誤

4、,比如賬戶不存在,余額不足等。二是不可預(yù)見(jiàn)的錯(cuò)誤,比如錯(cuò)誤,比如DBMS停止服務(wù)、操作延時(shí)導(dǎo)致中斷等等。停止服務(wù)、操作延時(shí)導(dǎo)致中斷等等。(3) 把一個(gè)業(yè)務(wù)所需的把一個(gè)業(yè)務(wù)所需的多個(gè)操作放入一個(gè)事務(wù)多個(gè)操作放入一個(gè)事務(wù),可以保證,可以保證所有操作作為一個(gè)單元來(lái)執(zhí)行。所有操作作為一個(gè)單元來(lái)執(zhí)行。事務(wù)執(zhí)行原理事務(wù)執(zhí)行原理p 事務(wù)作為一個(gè)整體提交,在提交之前,所有的事務(wù)作為一個(gè)整體提交,在提交之前,所有的操作被臨時(shí)存放起操作被臨時(shí)存放起來(lái)來(lái),并沒(méi)有保存到數(shù)據(jù)庫(kù)中。,并沒(méi)有保存到數(shù)據(jù)庫(kù)中。p 任何一個(gè)操作錯(cuò)誤,數(shù)據(jù)將回退到事務(wù)開(kāi)始時(shí)的狀態(tài),臨時(shí)更改任何一個(gè)操作錯(cuò)誤,數(shù)據(jù)將回退到事務(wù)開(kāi)始時(shí)的狀態(tài),臨時(shí)更改

5、被全部取消。被全部取消。p 事務(wù)提交后,數(shù)據(jù)更新被保存到數(shù)據(jù)庫(kù)。事務(wù)提交后,數(shù)據(jù)更新被保存到數(shù)據(jù)庫(kù)。T-SQL中管理事務(wù)中管理事務(wù) BEGIN TRAN 事務(wù)名事務(wù)名-開(kāi)始事務(wù)開(kāi)始事務(wù)操作操作1if 錯(cuò)誤錯(cuò)誤 ROLLBACK-回退回退操作操作2 if 錯(cuò)誤錯(cuò)誤 ROLLBACK-回退回退 操作操作3 if 錯(cuò)誤錯(cuò)誤 ROLLBACK-回退回退 COMMIT TRAN 事務(wù)名事務(wù)名-提交事務(wù)提交事務(wù)事物的屬性事物的屬性(ACID)原子性原子性(Atomicity)事務(wù)中的操作要么全成功,要么事務(wù)中的操作要么全成功,要么全回退,全回退,一致性一致性(Consistency)事務(wù)執(zhí)行前后數(shù)據(jù)在邏輯

6、上是一事務(wù)執(zhí)行前后數(shù)據(jù)在邏輯上是一致的,致的,隔離性隔離性(Isolation)甲事務(wù)執(zhí)行時(shí),乙事務(wù)不能得到甲甲事務(wù)執(zhí)行時(shí),乙事務(wù)不能得到甲事務(wù)中間的狀態(tài)。即事務(wù)串行化,乙事務(wù)得到的數(shù)據(jù)事務(wù)中間的狀態(tài)。即事務(wù)串行化,乙事務(wù)得到的數(shù)據(jù)要么是甲事務(wù)執(zhí)行前的狀態(tài),要么是執(zhí)行后的狀態(tài)。要么是甲事務(wù)執(zhí)行前的狀態(tài),要么是執(zhí)行后的狀態(tài)。持久性持久性(Durability)事務(wù)執(zhí)行完后,對(duì)數(shù)據(jù)進(jìn)行的更事務(wù)執(zhí)行完后,對(duì)數(shù)據(jù)進(jìn)行的更改將被保存。改將被保存。事務(wù)的事務(wù)的3種模式種模式1.顯式事務(wù):用顯式事務(wù):用BEGIN TRAN開(kāi)始事務(wù),用開(kāi)始事務(wù),用COMMIT 提提交事務(wù),用交事務(wù),用ROLLBACK回退事務(wù)

7、。回退事務(wù)。 (重點(diǎn)重點(diǎn))2.自動(dòng)提交事務(wù):是數(shù)據(jù)引擎的缺省模式,每個(gè)單獨(dú)的自動(dòng)提交事務(wù):是數(shù)據(jù)引擎的缺省模式,每個(gè)單獨(dú)的語(yǔ)句在完成后被提交,失敗后被回滾。語(yǔ)句在完成后被提交,失敗后被回滾。 3.隱式事務(wù):一個(gè)語(yǔ)句是一個(gè)新的事務(wù),直到結(jié)束這個(gè)隱式事務(wù):一個(gè)語(yǔ)句是一個(gè)新的事務(wù),直到結(jié)束這個(gè)事務(wù)(事務(wù)(提交或回退提交或回退)。)。 10.5 10.5 事務(wù)處理事務(wù)處理使用事務(wù)的經(jīng)驗(yàn):使用事務(wù)的經(jīng)驗(yàn): 在存儲(chǔ)過(guò)程中管理事務(wù),控制事務(wù)的啟動(dòng)、提交和回在存儲(chǔ)過(guò)程中管理事務(wù),控制事務(wù)的啟動(dòng)、提交和回滾。事務(wù)中的所有操作包含在:滾。事務(wù)中的所有操作包含在:BEGIN TRAN和和COMMIT TRAN之間。

8、自定義存儲(chǔ)過(guò)程狀態(tài)值,以反之間。自定義存儲(chǔ)過(guò)程狀態(tài)值,以反應(yīng)事務(wù)是否有效執(zhí)行。應(yīng)事務(wù)是否有效執(zhí)行。(2) 對(duì)事務(wù)中的每個(gè)操作進(jìn)行跟蹤,一般用到兩個(gè)系統(tǒng)變對(duì)事務(wù)中的每個(gè)操作進(jìn)行跟蹤,一般用到兩個(gè)系統(tǒng)變量:量: error和和 rowcount。用系統(tǒng)變量用系統(tǒng)變量error跟蹤執(zhí)行狀態(tài),當(dāng)跟蹤執(zhí)行狀態(tài),當(dāng)error0時(shí),時(shí),說(shuō)明操作發(fā)生了執(zhí)行錯(cuò)誤;說(shuō)明操作發(fā)生了執(zhí)行錯(cuò)誤;用系統(tǒng)變量用系統(tǒng)變量rowcount跟蹤受影響的行數(shù)跟蹤受影響的行數(shù),如果,如果rowcount與預(yù)期不符,說(shuō)明操作發(fā)生了業(yè)務(wù)錯(cuò)誤。與預(yù)期不符,說(shuō)明操作發(fā)生了業(yè)務(wù)錯(cuò)誤。發(fā)生錯(cuò)誤時(shí),用發(fā)生錯(cuò)誤時(shí),用ROLLBACK TRAN回退事

9、務(wù)。回退事務(wù)。示例:示例:余額表余額表(帳號(hào),余額帳號(hào),余額)“001”賬戶向賬戶向“002”賬戶轉(zhuǎn)賬戶轉(zhuǎn)X元,手續(xù)費(fèi)元,手續(xù)費(fèi)1%,需要完成如,需要完成如下下2項(xiàng)數(shù)據(jù)操作:項(xiàng)數(shù)據(jù)操作:操作操作1:001賬戶減賬戶減X*1.01,操作操作2:002賬戶加賬戶加X(jué).可能發(fā)生的錯(cuò)誤如下:可能發(fā)生的錯(cuò)誤如下:可控的錯(cuò)誤:可控的錯(cuò)誤:沒(méi)有沒(méi)有001賬號(hào),沒(méi)有賬號(hào),沒(méi)有002賬號(hào),賬號(hào),001賬號(hào)賬號(hào)余額不足。余額不足。不可控的錯(cuò)誤:操作不可控的錯(cuò)誤:操作1失敗,操作失敗,操作2失敗。失敗。(事務(wù)定義事務(wù)定義見(jiàn)見(jiàn) 代碼代碼)使用事務(wù)的不好的做法:使用事務(wù)的不好的做法: 有些程序員定義事務(wù)時(shí),只用一對(duì)有些

10、程序員定義事務(wù)時(shí),只用一對(duì)BEGIN TRAN和和COMMIT TRAN,在這種情況下,如果部分操作發(fā)生錯(cuò),在這種情況下,如果部分操作發(fā)生錯(cuò)誤,其余操作可能成功,將導(dǎo)致數(shù)據(jù)的不一致性。誤,其余操作可能成功,將導(dǎo)致數(shù)據(jù)的不一致性。 在開(kāi)始事務(wù)之前使用在開(kāi)始事務(wù)之前使用SET XACT_ABORT ON(默認(rèn)情況(默認(rèn)情況下為下為OFF),可以保證事務(wù)中任一操作發(fā)生錯(cuò)誤時(shí),所有,可以保證事務(wù)中任一操作發(fā)生錯(cuò)誤時(shí),所有操作全部回退,但這種方法操作全部回退,但這種方法只能檢查執(zhí)行錯(cuò)誤只能檢查執(zhí)行錯(cuò)誤,不能檢不能檢查業(yè)務(wù)錯(cuò)誤查業(yè)務(wù)錯(cuò)誤。例如:例如:SET XACT_Abort ONBEGIN TRANU

11、PDATE 余額表余額表 SET 余額余額=余額余額-amount*1.01 WHERE 賬號(hào)賬號(hào)=outIdUPDATE 余額表余額表 SET 余額余額=余額余額+amount WHERE 賬號(hào)賬號(hào)=inId print 轉(zhuǎn)賬成功轉(zhuǎn)賬成功(1) COMMIT TRAN案例案例10.5.2 10.5.2 事務(wù)管理事務(wù)管理事務(wù)嵌套事務(wù)嵌套事務(wù)可以嵌套執(zhí)行。即事務(wù)可以嵌套執(zhí)行。即BEGIN TRAN和和COMMIT TRAN之間可以含之間可以含有有BEGIN TRAN和和COMMIT TRAN。最外層的事務(wù)提交時(shí),內(nèi)存事務(wù)的操作才被接受,如果外層事務(wù)被最外層的事務(wù)提交時(shí),內(nèi)存事務(wù)的操作才被接受,如

12、果外層事務(wù)被回退,內(nèi)層事務(wù)也將被回退?;赝?,內(nèi)層事務(wù)也將被回退。案例案例10.5.2 10.5.2 事務(wù)管理事務(wù)管理事務(wù)部分回退事務(wù)部分回退 在事務(wù)中設(shè)定在事務(wù)中設(shè)定保存點(diǎn)保存點(diǎn)(SavePoint),可指定,可指定回退到保存點(diǎn)回退到保存點(diǎn),保存點(diǎn)之前的操作被視為保存點(diǎn)之前的操作被視為有效有效。例:例:如果在完成轉(zhuǎn)賬之后,顯示賬戶余額??稍谵D(zhuǎn)賬業(yè)務(wù)完如果在完成轉(zhuǎn)賬之后,顯示賬戶余額??稍谵D(zhuǎn)賬業(yè)務(wù)完成時(shí),進(jìn)行一次事務(wù)保存。成時(shí),進(jìn)行一次事務(wù)保存。BEGIN TRAN tran_轉(zhuǎn)賬并顯示余額轉(zhuǎn)賬并顯示余額 -轉(zhuǎn)賬操作轉(zhuǎn)賬操作 SAVE TRAN AFTER_轉(zhuǎn)賬轉(zhuǎn)賬 SELECT * FROM

13、余額表余額表 WHERE 賬號(hào)賬號(hào)=outId if error0 ROLLBACK TRAN AFTER_轉(zhuǎn)賬轉(zhuǎn)賬 COMMIT TRAN TRAN tran_轉(zhuǎn)賬并顯示余額轉(zhuǎn)賬并顯示余額 思考:思考:在在BookStore數(shù)據(jù)庫(kù)中,存在三個(gè)表:數(shù)據(jù)庫(kù)中,存在三個(gè)表:圖書表圖書表(圖書編號(hào)圖書編號(hào),書名,狀態(tài),書名,狀態(tài))借閱表借閱表(圖書編號(hào)圖書編號(hào),借書證號(hào),借出日期,借書證號(hào),借出日期)業(yè)務(wù)記錄表業(yè)務(wù)記錄表(業(yè)務(wù)編號(hào),借書證號(hào),圖書編號(hào),業(yè)務(wù)業(yè)務(wù)編號(hào),借書證號(hào),圖書編號(hào),業(yè)務(wù)日期,業(yè)務(wù)類型日期,業(yè)務(wù)類型)當(dāng)借書業(yè)務(wù)發(fā)生時(shí),需要對(duì)三個(gè)數(shù)據(jù)操作,當(dāng)借書業(yè)務(wù)發(fā)生時(shí),需要對(duì)三個(gè)數(shù)據(jù)操作,(1)

14、圖書表中某行的狀態(tài)改為圖書表中某行的狀態(tài)改為借出借出,(2)借閱表增加一行,借閱表增加一行,(3)業(yè)務(wù)記錄表增加一行。業(yè)務(wù)記錄表增加一行。請(qǐng)編寫存儲(chǔ)過(guò)程請(qǐng)編寫存儲(chǔ)過(guò)程proc_LendBook,在存儲(chǔ)過(guò)程中使用,在存儲(chǔ)過(guò)程中使用事事務(wù)務(wù),實(shí)現(xiàn)借書邏輯。,實(shí)現(xiàn)借書邏輯。2. 觸發(fā)器觸發(fā)器關(guān)鍵詞:關(guān)鍵詞:INSTEAD OF觸發(fā)器觸發(fā)器, AFTER觸觸發(fā)器,發(fā)器,INSERTED表,表,DELETED表表思考:思考:考慮考慮思考思考中編寫的存儲(chǔ)過(guò)程,當(dāng)用戶調(diào)用這個(gè)存中編寫的存儲(chǔ)過(guò)程,當(dāng)用戶調(diào)用這個(gè)存儲(chǔ)過(guò)程時(shí),可以保證數(shù)據(jù)庫(kù)的邏輯一致性,但儲(chǔ)過(guò)程時(shí),可以保證數(shù)據(jù)庫(kù)的邏輯一致性,但是如果用戶直接在是

15、如果用戶直接在DBMS中中對(duì)對(duì)“借閱表借閱表”表進(jìn)表進(jìn)行增、刪、改操作呢?行增、刪、改操作呢?解決方法解決方法:在:在“借閱表借閱表”上定義觸發(fā)器。上定義觸發(fā)器。觸發(fā)器觸發(fā)器(TRIGGER)是一種特殊類型的存儲(chǔ)過(guò)程。是一種特殊類型的存儲(chǔ)過(guò)程。p觸發(fā)器是一種存儲(chǔ)過(guò)程,與一般的存儲(chǔ)過(guò)程不同的是:觸發(fā)器是一種存儲(chǔ)過(guò)程,與一般的存儲(chǔ)過(guò)程不同的是:觸發(fā)器是通過(guò)事件觸發(fā)的,而普通的存儲(chǔ)過(guò)程需要調(diào)觸發(fā)器是通過(guò)事件觸發(fā)的,而普通的存儲(chǔ)過(guò)程需要調(diào)用才執(zhí)行。用才執(zhí)行。p常見(jiàn)的觸發(fā)器由常見(jiàn)的觸發(fā)器由UPDATE、INSERT、DELETE操作觸操作觸發(fā),這種觸發(fā)器的稱為發(fā),這種觸發(fā)器的稱為DML觸發(fā)器。也有觸發(fā)器

16、。也有DDL觸發(fā)器,觸發(fā)器,不常使用。不常使用。p觸發(fā)器用于保證數(shù)據(jù)完整性,觸發(fā)器用于保證數(shù)據(jù)完整性,凡是約束能提供的保證,凡是約束能提供的保證,觸發(fā)器都可以提供觸發(fā)器都可以提供,約束無(wú)法保證的完整性,觸發(fā)器,約束無(wú)法保證的完整性,觸發(fā)器也能提供。也能提供。觸發(fā)器的兩種類型觸發(fā)器的兩種類型INSTEAD OF 觸發(fā)器觸發(fā)器對(duì)數(shù)據(jù)增刪改時(shí),只執(zhí)行觸發(fā)對(duì)數(shù)據(jù)增刪改時(shí),只執(zhí)行觸發(fā)器中的操作,而不執(zhí)行(器中的操作,而不執(zhí)行( UPDATE、INSERT、DELETE )操作。)操作。AFTER觸發(fā)器觸發(fā)器數(shù)據(jù)增刪改操作被臨時(shí)存放,然后與數(shù)據(jù)增刪改操作被臨時(shí)存放,然后與觸發(fā)器中的操作一起提交,也可以檢查

17、錯(cuò)誤從而回退。觸發(fā)器中的操作一起提交,也可以檢查錯(cuò)誤從而回退。相當(dāng)于增刪改操作與觸發(fā)器中的操作構(gòu)成一個(gè)事務(wù)。相當(dāng)于增刪改操作與觸發(fā)器中的操作構(gòu)成一個(gè)事務(wù)。觸發(fā)器的執(zhí)行時(shí)間觸發(fā)器的執(zhí)行時(shí)間當(dāng)一個(gè)表同時(shí)存在當(dāng)一個(gè)表同時(shí)存在INSTEAD OF觸發(fā)器、觸發(fā)器、AFTER觸發(fā)器觸發(fā)器和約束時(shí),對(duì)該表中的數(shù)據(jù)進(jìn)行增刪改,則三種數(shù)據(jù)和約束時(shí),對(duì)該表中的數(shù)據(jù)進(jìn)行增刪改,則三種數(shù)據(jù)庫(kù)對(duì)象依次工作,執(zhí)行次序是:庫(kù)對(duì)象依次工作,執(zhí)行次序是:執(zhí)行執(zhí)行INSTEAD OF觸觸發(fā)器發(fā)器-驗(yàn)證約束驗(yàn)證約束-執(zhí)行執(zhí)行AFTER觸發(fā)器觸發(fā)器。10.4.1 10.4.1 創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器DML觸發(fā)器基于觸發(fā)器基于Delet

18、ed表和表和Inserted表來(lái)工作。表來(lái)工作。Deleted表和表和Inserted表是兩個(gè)臨時(shí)表表是兩個(gè)臨時(shí)表。執(zhí)行執(zhí)行INSERT操作,被添加的行存儲(chǔ)在操作,被添加的行存儲(chǔ)在Inserted表中。表中。執(zhí)行執(zhí)行DELETE操作,被刪除的行會(huì)存儲(chǔ)在操作,被刪除的行會(huì)存儲(chǔ)在Deleted表。表。執(zhí)行執(zhí)行UPDATE操作,被修改的行存儲(chǔ)在操作,被修改的行存儲(chǔ)在Deleted表中,修表中,修改后的數(shù)據(jù)存儲(chǔ)在改后的數(shù)據(jù)存儲(chǔ)在Inserted表中。表中。使用觸發(fā)器的建議使用觸發(fā)器的建議 盡量使用約束,僅僅在約束不能滿足要求的時(shí)候使用盡量使用約束,僅僅在約束不能滿足要求的時(shí)候使用觸發(fā)器。觸發(fā)器。 盡量

19、使用存儲(chǔ)過(guò)程為外部用戶提供調(diào)用接口,觸發(fā)器盡量使用存儲(chǔ)過(guò)程為外部用戶提供調(diào)用接口,觸發(fā)器僅用來(lái)控制數(shù)據(jù)庫(kù)管理員在僅用來(lái)控制數(shù)據(jù)庫(kù)管理員在DBMS上的更新操作。上的更新操作。 要注意,由于存儲(chǔ)過(guò)程中的數(shù)據(jù)更新也會(huì)觸發(fā)要注意,由于存儲(chǔ)過(guò)程中的數(shù)據(jù)更新也會(huì)觸發(fā)TRIGGER,因此,要留意避免重復(fù)的操作。例如:,因此,要留意避免重復(fù)的操作。例如:用戶調(diào)用存儲(chǔ)過(guò)程,存儲(chǔ)過(guò)程進(jìn)行了三個(gè)關(guān)聯(lián)操作,用戶調(diào)用存儲(chǔ)過(guò)程,存儲(chǔ)過(guò)程進(jìn)行了三個(gè)關(guān)聯(lián)操作,其中的某個(gè)操作上觸發(fā)器也要求進(jìn)行關(guān)聯(lián)操作,這樣其中的某個(gè)操作上觸發(fā)器也要求進(jìn)行關(guān)聯(lián)操作,這樣就產(chǎn)生了重復(fù)。就產(chǎn)生了重復(fù)。課堂練習(xí):請(qǐng)回答觸發(fā)情況課堂練習(xí):請(qǐng)回答觸發(fā)情況

20、-select * from 學(xué)生表學(xué)生表-select * from 成績(jī)表成績(jī)表CREATE TRIGGER TR_學(xué)生表學(xué)生表 ON 學(xué)生表學(xué)生表INSTEAD OF INSERTASIF (SELECT Count(*) FROM 學(xué)生表學(xué)生表WHERE 性別性別=男男) 5 select * from insertedCREATE TRIGGER TR_學(xué)生表學(xué)生表 ON 學(xué)生表學(xué)生表for INSERT,DELETE,UPDATEASBEGINUPDATE 學(xué)生表學(xué)生表 SET 年齡年齡=年齡年齡+10 WHERE 學(xué)號(hào)學(xué)號(hào)= 001-UPDATE 學(xué)生表學(xué)生表 SET 年齡年齡=

21、年齡年齡+10 WHERE 學(xué)號(hào)學(xué)號(hào)= 100if error0 rollbackEND注意:觸發(fā)器中的注意:觸發(fā)器中的rollback將使將使INSERT,DELETE,UPDATE等操作回退等操作回退insert 學(xué)生表學(xué)生表 values(022,劉二劉二,男男,19,05002,60.0,從化從化,廣州大學(xué)廣州大學(xué))UPDATE 學(xué)生表學(xué)生表 set 學(xué)分學(xué)分=74總結(jié)總結(jié) 事務(wù)是一個(gè)操作序列,它包含了一組數(shù)據(jù)庫(kù)操作命令,事務(wù)是一個(gè)操作序列,它包含了一組數(shù)據(jù)庫(kù)操作命令,所有的命令作為一個(gè)整體一起向系統(tǒng)提交或撤銷操作所有的命令作為一個(gè)整體一起向系統(tǒng)提交或撤銷操作請(qǐng)求,即要么都執(zhí)行,要么都不執(zhí)行。通常在程序中請(qǐng)求,即要么都執(zhí)行,要么都不執(zhí)行

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論