實(shí)訓(xùn)十 觸發(fā)器的創(chuàng)建和使用_第1頁(yè)
實(shí)訓(xùn)十 觸發(fā)器的創(chuàng)建和使用_第2頁(yè)
實(shí)訓(xùn)十 觸發(fā)器的創(chuàng)建和使用_第3頁(yè)
實(shí)訓(xùn)十 觸發(fā)器的創(chuàng)建和使用_第4頁(yè)
實(shí)訓(xùn)十 觸發(fā)器的創(chuàng)建和使用_第5頁(yè)
已閱讀5頁(yè),還剩4頁(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、網(wǎng)絡(luò)數(shù)據(jù)庫(kù)實(shí)訓(xùn)報(bào)告日期:2010年12月17日 班 級(jí):09級(jí)計(jì)算機(jī)信息管理學(xué)號(hào)姓名指導(dǎo)老師實(shí)訓(xùn)地點(diǎn)成績(jī)38莊維瀚羅小平教 A505實(shí)訓(xùn)項(xiàng)目名稱 實(shí)訓(xùn)十 觸發(fā)器的創(chuàng)建和使用一、實(shí)訓(xùn)目的和要求1、理解觸發(fā)器的作用;2、了解觸發(fā)器和一般存儲(chǔ)過(guò)程的區(qū)別;3、掌握創(chuàng)建、修改及刪除觸發(fā)器的方法;4、理解觸發(fā)器執(zhí)行的過(guò)程。二、實(shí)訓(xùn)所需儀器、設(shè)備硬件:計(jì)算機(jī)軟件:操作系統(tǒng) Windows XP、SQL Server 2005三、實(shí)訓(xùn)內(nèi)容(一)簡(jiǎn)單觸發(fā)器的創(chuàng)建和使用1、在student數(shù)據(jù)庫(kù)中t_course表創(chuàng)建一名為myt1的AFTER觸發(fā)器,要求實(shí)現(xiàn) 以下功能:當(dāng)插入一條記錄后提示“已插入一條新記錄”,

2、并驗(yàn)證此觸發(fā)器。use student gocreate trigger mytl on t_course for insertasdeclare msg char(30) set msg=已插入一條新記錄 print msg-驗(yàn)證 use studentgoinsert into t_coursec_number,c_name,hours,creditvalues (123456,語(yǔ)文,70,2) go囪消息已插入_ 一條新記錄(1行受影響)2、在student數(shù)據(jù)庫(kù)中t_course表創(chuàng)建一名為myt2的AFTER觸發(fā)器,要求實(shí)現(xiàn) 以下功能:當(dāng)刪除一條記錄后提示“已刪除一條記錄”,并驗(yàn)證此

3、觸發(fā)器。use studentgocreate trigger myt2 on t_course for deleteasprint 已刪除一條記錄-驗(yàn)證 use studentgodelete from t_course where c_number =123456go_J消息已刪除一條記錄行受影響)3、在student數(shù)據(jù)庫(kù)中t_course表創(chuàng)建一名為myt3的AFTER觸發(fā)器,要求實(shí)現(xiàn) 以下功能:當(dāng)修改一條記錄后提示“已修改一條記錄”,并驗(yàn)證此觸發(fā)器。use studentgocreate trigger myt3on t_course for update asprint 已修改一條

4、記錄-驗(yàn)證use studentgoupdate t_course set c_name =高等語(yǔ)文where c_number = 10010218go_J消息已修改一條記錄(1行受影響)4、在student數(shù)據(jù)庫(kù)中t_course表創(chuàng)建一名為myt4的INSTEAD OF觸發(fā)器,要 求實(shí)現(xiàn)以下功能:當(dāng)刪除一條記錄之前提示“不能刪除此表的記錄!”,并驗(yàn) 證此觸發(fā)器,檢查是否能刪除此表的記錄。USE STUDENTGOCREATE TRIGGER myt4ON T_COURSEINSTEAD OF DELETEASPRINT INSTEAD OF觸發(fā)器開(kāi)始執(zhí)行PRINT 不能刪除此表的記錄!G

5、O-驗(yàn)證USE studentGODELETE FROM t_course WHERE c_number=10010218GO_J消息INSTEAD of觸發(fā)器開(kāi)始執(zhí)行.不能刪除此表的記錄?。?行受最響)5、刪除以上創(chuàng)建的所有觸發(fā)器。USE STUDENTGOdrop trigger myt1,myt2,myt3,myt4GO隹消息命令已成功完成。(二)較復(fù)雜的觸發(fā)器的創(chuàng)建和使用1、創(chuàng)建一個(gè)AFTER觸發(fā)器,要求實(shí)現(xiàn)以下功能:在t_score表上創(chuàng)建一個(gè)插入 更新類型的觸發(fā)器scoreCheck,當(dāng)在score字段中插入或修改考試分?jǐn)?shù)后,觸 發(fā)該觸發(fā)器,檢查分?jǐn)?shù)是否在0至100分之間。CREA

6、TE TRIGGER TR_ScoreCheckON T_SCOREFOR INSERT, UPDATEASIF UPDATE(SCORE)PRINT AFTER觸發(fā)器開(kāi)始執(zhí)行BEGINDECLARE ScoreValue realSELECT ScoreValue=(SELECT SCORE FROM inserted)IF ScoreValue100 OR ScoreValue0PRINT 輸入的分?jǐn)?shù)有誤,請(qǐng)確認(rèn)輸入的考試分?jǐn)?shù)!END-驗(yàn)證TR_ScoreCheck觸發(fā)器的功能USE studentGOPRINT 在t_score中插入記錄時(shí)觸發(fā)器執(zhí)行結(jié)果:PRINT INSERT INT

7、O t_scoreVALUES(0554112,10010218,-35)INSERT INTO t_scoreVALUES(0554113,100102183,152)GOPRINT 在t_score中修改記錄時(shí)觸發(fā)器執(zhí)行結(jié)果:PRINT UPDATE t_scoreSET score=115WHERE s_number = 0554112UPDATE t_scoreSET score=-65WHERE snumber=0554113_J消息在中插入記錄時(shí)觸發(fā)器執(zhí)行結(jié)果:afterM發(fā)器開(kāi)始執(zhí)行.輸入的分?jǐn)?shù)有誤,話確認(rèn)輸入的考試分?jǐn)?shù)!(1行受影響)afterM發(fā)器開(kāi)始執(zhí)行.輸入的分?jǐn)?shù)有誤,清

8、酶認(rèn)輸入的考試分?jǐn)?shù)!(1行受影響)_在匕_與口口=已 中修改記錄時(shí)觸發(fā)器執(zhí)行結(jié)果:afterM發(fā)器開(kāi)始執(zhí)行.輸入的分?jǐn)?shù)有誤,話確認(rèn)輸入的考試分?jǐn)?shù)!(1行受影響)afterM發(fā)器開(kāi)始執(zhí)行.輸入的分?jǐn)?shù)有誤,話確認(rèn)輸人的考試分?jǐn)?shù)!(1行受影響)2、創(chuàng)建一個(gè)AFTER觸發(fā)器,要求實(shí)現(xiàn)以下功能:在t_score表上創(chuàng)建一個(gè)插入 更新類型的觸發(fā)器scoreCheck2,當(dāng)在score字段中插入或修改考試分?jǐn)?shù)后, 觸發(fā)該觸發(fā)器,檢查分?jǐn)?shù)是否在0至100分之間,若不在,則不能插入或修 改,并給出提示。代碼段如下:CREATE TRIGGER scoreCheck2 ON t_scoreFOR insert,

9、updateASdeclare ScoreValue as intselect ScoreValue =(select score from inserted)if ScoreValue 100beginrollback transactionprint 數(shù)據(jù)不正確不能修改end驗(yàn)證上面創(chuàng)建的觸發(fā)器,檢查當(dāng)輸入的分?jǐn)?shù)不在0到100之間,能否保 存分?jǐn)?shù)。此功能的實(shí)現(xiàn)是依賴代碼段的黑體字標(biāo)識(shí)的語(yǔ)句rollback transaction來(lái)實(shí)現(xiàn)的,其作用是回滾變動(dòng)的數(shù)據(jù)。教材沒(méi)有此語(yǔ)句。CREATE TRIGGER scoreCheck2 ON t_scoreFOR insert, updateAS

10、declare ScoreValue as intselect ScoreValue =(select score from inserted)if ScoreValue 100begin-回滾變動(dòng)的數(shù)據(jù)rollback transactionprint 數(shù)據(jù)不正確不能修改end-驗(yàn)證USE studentGOPRINT 在t_score中插入記錄時(shí)觸發(fā)器執(zhí)行結(jié)果:PRINT INSERT INTO t_scoreVALUES (0554114, 10010218, 35)INSERT INTO t_scoreVALUES (0554115, 100102183, 52)GOPRINT 在t_

11、score中修改記錄時(shí)觸發(fā)器執(zhí)行結(jié)果:PRINT UPDATE t_scoreSET score=115WHERE s_number = 0554114UPDATE t_scoreSET score=-65WHERE s_number = 0554115危消息l在t.score中插入記錄時(shí)觸發(fā)器執(zhí)行結(jié)果:(1行受最響)(1行受最響)_在中修改記錄時(shí)觸發(fā)器執(zhí)行結(jié)果:數(shù)據(jù)不正確插入或修改_消息3609,緩期0狀態(tài)1,第3行 事務(wù)在觸發(fā)器中結(jié)束批處理已中止。3、根據(jù)教材第4章P68創(chuàng)建一個(gè)檢查約束,實(shí)現(xiàn)上述2的功能。體會(huì)觸發(fā)器與 檢查約束功能上的相似之處(直接在控制臺(tái)做)4、在student數(shù)據(jù)庫(kù)中

12、t_course表創(chuàng)建一名為twofield的AFTER觸發(fā)器,要求 實(shí)現(xiàn)以下功能:當(dāng)在hours (學(xué)時(shí))和credit(學(xué)分)字段插入或修改學(xué)時(shí)或?qū)W 分后,觸發(fā)該觸發(fā)器,檢查學(xué)時(shí)是否是大于0小于200的整數(shù),并且學(xué)分是 否是大于0小于10的實(shí)數(shù),若不滿足這兩個(gè)條件,則不允許插入或修改,并 給出提示。CREATE TRIGGER twofield ON t_course FOR insert, update AS declare h as int, c as real select h =(select hours from inserted) select c =(select credi

13、t from inserted) if h2 0 0 or c10 begin rollback transaction print 數(shù)據(jù)不正確不能修改 end USE student INSERT INTO t_course c_number hours,creditVALUES(20095504,210,-35)5、根據(jù)教材第4章P68創(chuàng)建一個(gè)檢查約束,實(shí)現(xiàn)上述4的功能。體會(huì)觸發(fā)器與 檢查約束功能上的相似之處(直接在控制臺(tái)做)6、創(chuàng)建一個(gè)AFTER觸發(fā)器,要求實(shí)現(xiàn)以下功能:在t_student表上創(chuàng)建一個(gè)刪 除類型的觸發(fā)器stu_delete,當(dāng)在t_student表中刪除某一條記錄后,觸

14、發(fā)該觸 發(fā)器,在t_score表中刪除與此學(xué)號(hào)對(duì)應(yīng)的記錄。CREATE TRIGGER TR_Stu_Delete ON T_STUDENT FOR DELETE AS PRINT 刪除觸發(fā)器開(kāi)始執(zhí)行. DECLARE StuNum char(10) PRINT 把在T_STUDENT表中刪除的記錄的S_NUMBER賦值給局部變量StuNum。 SELECT StuNum S_NUMBER FROM deleted PRINT 開(kāi)始查找并刪除T_SCORE表中的相關(guān)記錄. DELETE FROM T_SCORE WHERE S_NUMBER=StuNum PRINT 刪除了 T_SCORE表中

15、的學(xué)號(hào)為 + RTRIM StuNum) + 的記錄。 -驗(yàn)證Stu_Delete觸發(fā)器的功能 USE student GO PRINT 在t_score中插入記錄時(shí)觸發(fā)器執(zhí)行結(jié)果: PRINT DELETE FROM t_student WHERE s_number =0554112 DELETE FROM tstudent WHERE snumber=0554113GO7、分析能用外鍵約束實(shí)現(xiàn)上述6的功能嗎?由此體會(huì)觸發(fā)器與外鍵約束的不同 之外處。是可以實(shí)現(xiàn)的。8、創(chuàng)建一個(gè)INSERT觸發(fā)器,完成的功能是當(dāng)在t_score表中插入或修改s_number列的數(shù)據(jù)時(shí),檢測(cè)t_student表中

16、是否存在相應(yīng)的s_number值,如果不存在, 則不允許插入和修改,并給出相應(yīng)的提示信息。CREATE TRIGGER newt ON t_score FOR INSERT AS declare t as char(10) select t =(select s_number from inserted if t in (select s_number from t_student print 已插入 else begin rollback transaction print 學(xué)生信息表中不存在該學(xué)號(hào),所以不能插入 end-驗(yàn)證USE studentGOPRINT 在t_score中插入記錄時(shí)

17、觸發(fā)器執(zhí)行結(jié)果: PRINT INSERT INTO t_scoreVALUES (0554150, 10010218,-35) GO_J消息t_score 中插入記錄時(shí)觸發(fā)器執(zhí)行結(jié)果:學(xué)生信息表中不存在該學(xué)號(hào),所以不能插人 消息360%吸別16,狀態(tài)第3行 事務(wù)在觸發(fā)器中結(jié)束。批處理已中止。四、實(shí)訓(xùn)步驟(內(nèi)容說(shuō)明:1.大致的操作步驟;源代碼,要標(biāo)注題號(hào))答:1、大致的步驟:【打開(kāi)數(shù)據(jù)庫(kù)】一【打開(kāi)student】-【打開(kāi)表】-【在需要的表上創(chuàng)建觸發(fā)器】一【新建觸發(fā)器】一【輸入代碼】一【驗(yàn)證】2、源代碼附在題日的后面了。五、總結(jié)與分析(內(nèi)容說(shuō)明:1.對(duì)此次實(shí)訓(xùn)原理的歸納;對(duì)此次實(shí)訓(xùn)過(guò)程中出現(xiàn)問(wèn)題

18、的分析及解決辦法;此次實(shí)訓(xùn)的收獲或體會(huì)等)答:1、此次實(shí)訓(xùn)原理的歸納:(1)理解觸發(fā)器的作用;(2)了解觸發(fā)器和一般存儲(chǔ)過(guò)程的區(qū)別;(3)掌握創(chuàng)建、修改及刪除觸發(fā)器的方法;(4)理解觸發(fā)器執(zhí)行的過(guò)程。2、此次實(shí)訓(xùn)過(guò)程中出現(xiàn)問(wèn)題的分析及解決辦法:沒(méi)有注意到外鍵約束,剛開(kāi)始沒(méi)有刪掉,導(dǎo)致后面出現(xiàn)問(wèn)題。3、此次實(shí)訓(xùn)的收獲或體會(huì):對(duì)于這次剛剛學(xué)習(xí)到的知識(shí),這些只是熟悉罷了,還有待自己虛心向?qū)W,遇到的 問(wèn)題還需認(rèn)真的去解讀,牢牢地記住。六、思考題1、簡(jiǎn)述觸發(fā)器與存儲(chǔ)過(guò)程的區(qū)別。答:一般的存儲(chǔ)過(guò)程由用戶根據(jù)需要通過(guò)存儲(chǔ)過(guò)程名稱被調(diào)用調(diào)用的,而觸發(fā)器 主要是通過(guò)事件(執(zhí)行INSERT、UPDATE或DELETE語(yǔ)句)進(jìn)行觸發(fā)而自 動(dòng)執(zhí)行的。存儲(chǔ)過(guò)程不依賴于某個(gè)表而單獨(dú)存在,而觸發(fā)器必須基于一個(gè)表或視圖創(chuàng)建。2、簡(jiǎn)述觸發(fā)器的作用。答:(1)、觸發(fā)器是自動(dòng)執(zhí)行的。(2)、觸發(fā)器可以通過(guò)數(shù)據(jù)庫(kù)中的相關(guān)表進(jìn)行層疊更改。(3)、觸發(fā)器可以強(qiáng)制限制。這些限制比用CHECK約束所定義的更復(fù)雜。與CHECK約束不同,觸發(fā)器可以引

溫馨提示

  • 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)論