資源描述:
《sql觸發(fā)器實(shí)例講解1》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、SQL觸發(fā)器實(shí)例1定義:何為觸發(fā)器?在SQLServer里面也就是對(duì)某一個(gè)表的一定的操作,觸發(fā)某種條件,從而執(zhí)行的一段程序。觸發(fā)器是一個(gè)特殊的存儲(chǔ)過程。??????常見的觸發(fā)器有三種:分別應(yīng)用于Insert,Update,Delete事件。??????我為什么要使用觸發(fā)器?比如,這么兩個(gè)表:??????CreateTableStudent(?????????????--學(xué)生表????????StudentIDintprimarykey,??????--學(xué)號(hào)????????....???????)???
2、???CreateTableBorrowRecord(??????????????--學(xué)生借書記錄表????????BorrowRecord??intidentity(1,1),??????--流水號(hào)??????????StudentID?????int,???????????????????--學(xué)號(hào)????????BorrowDate????datetime,???????????????--借出時(shí)間????????ReturnDAte????Datetime,???????????????--歸還
3、時(shí)間????????...??????)?????用到的功能有:????????1.如果我更改了學(xué)生的學(xué)號(hào),我希望他的借書記錄仍然與這個(gè)學(xué)生相關(guān)(也就是同時(shí)更改借書記錄表的學(xué)號(hào));????????2.如果該學(xué)生已經(jīng)畢業(yè),我希望刪除他的學(xué)號(hào)的同時(shí),也刪除它的借書記錄。?????等等。?????這時(shí)候可以用到觸發(fā)器。對(duì)于1,創(chuàng)建一個(gè)Update觸發(fā)器:?????CreateTriggertruStudent???????OnStudent????????????????????????--在Student
4、表中創(chuàng)建觸發(fā)器???????forUpdate?????????????????????????--為什么事件觸發(fā)?????As???????????????????????????????????????--事件觸發(fā)后所要做的事情???????ifUpdate(StudentID)??????????????????begin?????????UpdateBorrowRecord???????????SetStudentID=i.StudentID???????????FromBorrowRecor
5、dbr,Deleted??d,Insertedi?????--Deleted和Inserted臨時(shí)表???????????Wherebr.StudentID=d.StudentID???????end?????????????????????????????理解觸發(fā)器里面的兩個(gè)臨時(shí)的表:Deleted,Inserted。注意Deleted與Inserted分別表示觸發(fā)事件的表“舊的一條記錄”和“新的一條記錄”。?????一個(gè)數(shù)據(jù)庫系統(tǒng)中有兩個(gè)虛擬表用于存儲(chǔ)在表中記錄改動(dòng)的信息,分別是:????????
6、?????????????????????虛擬表Inserted????????????????????虛擬表Deleted?在表記錄新增時(shí)????存放新增的記錄????????????????????????不存儲(chǔ)記錄?????????修改時(shí)??????????存放用來更新的新記錄??????????????????存放更新前的記錄?????????刪除時(shí)??????????不存儲(chǔ)記錄????????????????????????????存放被刪除的記錄?????一個(gè)Update的過程可以看作為:
7、生成新的記錄到Inserted表,復(fù)制舊的記錄到Deleted表,然后刪除Student記錄并寫入新紀(jì)錄。?????對(duì)于2,創(chuàng)建一個(gè)Delete觸發(fā)器?????CreatetriggertrdStudent???????OnStudent???????forDelete?????As???????DeleteBorrowRecord?????????FromBorrowRecordbr,Deltedd?????????Wherebr.StudentID=d.StudentID?????從這兩個(gè)例子我們
8、可以看到了觸發(fā)器的關(guān)鍵:A.2個(gè)臨時(shí)的表;B.觸發(fā)機(jī)制。?SQL觸發(fā)器實(shí)例2/*?建立虛擬測(cè)試環(huán)境,包含:表[卷煙庫存表],表[卷煙銷售表]。?請(qǐng)大家注意跟蹤這兩個(gè)表的數(shù)據(jù),體會(huì)觸發(fā)器到底執(zhí)行了什么業(yè)務(wù)邏輯,對(duì)數(shù)據(jù)有什么影響。?為了能更清晰的表述觸發(fā)器的作用,表結(jié)構(gòu)存在數(shù)據(jù)冗余,且不符合第三范式,這里特此說明。?*/?USEMaster?GO?IFEXISTS(SELECTNAMEFROMSYSOBJECTSWHEREXTYPE=’U’ANDNAME=’