數(shù)據(jù)庫原理與應(yīng)用實(shí)驗(yàn)12(二版)_第1頁
數(shù)據(jù)庫原理與應(yīng)用實(shí)驗(yàn)12(二版)_第2頁
數(shù)據(jù)庫原理與應(yīng)用實(shí)驗(yàn)12(二版)_第3頁
數(shù)據(jù)庫原理與應(yīng)用實(shí)驗(yàn)12(二版)_第4頁
數(shù)據(jù)庫原理與應(yīng)用實(shí)驗(yàn)12(二版)_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

1、第二篇課堂實(shí)驗(yàn)實(shí)驗(yàn)十二 存儲過程與觸發(fā)器一、實(shí)驗(yàn)?zāi)康募耙蟊緦?shí)驗(yàn)主要目的是讓學(xué)生通過實(shí)驗(yàn)掌握存儲過程的創(chuàng)建及使用方式、觸發(fā)器的創(chuàng)建,具體要求有:l 理解存儲過程的概念及類型,深刻理解存儲過程的優(yōu)點(diǎn)l 掌握創(chuàng)建各種存儲過程的方法l 掌握調(diào)用存儲過程的方法l 掌握查看、修改、刪除存儲過程的方法l 理解觸發(fā)器的概念與類型l 理解觸發(fā)器的功能及工作原理l 掌握創(chuàng)建、更改、刪除觸發(fā)器的方法l 掌握利用觸發(fā)器維護(hù)數(shù)據(jù)完整性的方法二、實(shí)驗(yàn)原理及背景知識(一)存儲過程知識存儲過程是一種數(shù)據(jù)庫對象,將執(zhí)行計(jì)劃存儲在數(shù)據(jù)庫的服務(wù)器中。它的運(yùn)行速度比獨(dú)立運(yùn)行同樣的程序要快。1、存儲過程類型1)系統(tǒng)存儲過程存儲在ma

2、ster數(shù)據(jù)庫中,以sp_為前綴。可以在其他數(shù)據(jù)庫中對其進(jìn)行調(diào)用。2)用戶自定義存儲過程由用戶創(chuàng)建并能完成某一特定功能的存儲過程,或稱本地存儲過程。 2、創(chuàng)建存儲過程存儲過程的三個(gè)組成部分:(1)所有的輸入?yún)?shù)以及傳給調(diào)用者的輸出參數(shù)。(2)被執(zhí)行的針對數(shù)據(jù)庫的操作語句,包括調(diào)用其他存儲過程的語句。(3)返回給調(diào)用者的狀態(tài)值,以指明調(diào)用是成功還是失敗。3、T-SQL創(chuàng)建存儲過程的基本語法格式:CREATE PROCEDURE 存儲過程名稱 參數(shù)定義AS SQL語句(二)觸發(fā)器知識觸發(fā)器是一種特殊類型的存儲過程,主要通過事件進(jìn)行觸發(fā)執(zhí)行的。可以實(shí)現(xiàn)由主鍵和外鍵所不能保證的參照完整性和數(shù)據(jù)的一致性

3、;強(qiáng)化約束;跟蹤變化;級聯(lián)運(yùn)行;存儲過程的調(diào)用等功能。1、觸發(fā)器的種類1)AFTER觸發(fā)器:只有對表執(zhí)行某一操作這后,才能被觸發(fā)??梢詾楸淼耐徊僮鞫x多個(gè)觸發(fā)器,其觸發(fā)次序可使用sp_settriggerorder來完成。2)INSTEAD OF觸發(fā)器:并不執(zhí)行其所定義的操作而僅是執(zhí)行觸發(fā)器本身,對同一操作只能定義一個(gè)instead of 觸發(fā)器。2、INSERTED和DELETED臨時(shí)表插入一行時(shí),INSERTED表保存了一份插入行的拷貝。刪除一行時(shí),DELETED表保存了刪除行的拷貝。更新一行時(shí),INSERTED表中保存了一份新行的拷貝,DELETED表中保存了一份舊行的拷貝。3、語法格

4、式:CREATE TRIGGER 觸發(fā)器名稱ON 表或視圖 FOR | AFTER | INSTEAD OF DELETE,INSERT,UPDATEAS SQL語句 三、實(shí)驗(yàn)內(nèi)容及步驟::基本實(shí)驗(yàn)內(nèi)容在SQL Server 2000中創(chuàng)建存儲過程和觸發(fā)器雖然可以通過企業(yè)管理器進(jìn)行,但是企業(yè)管理器僅僅是提供了一個(gè)利用T-SQL編寫存儲過程和觸發(fā)器的簡單模板,大部分內(nèi)容都是需要自己手工編寫的。而且在SQL Server 2005中只能通過T-SQL來編寫存儲過程和觸發(fā)器。因此,本實(shí)驗(yàn)只要求通過T-SQL來創(chuàng)建并管理存儲過程和觸發(fā)器,可視化方式請參考相關(guān)資料。-3-(一)存儲過程的創(chuàng)建和執(zhí)行1、創(chuàng)

5、建下面的存儲過程并執(zhí)行,然后分析其功能1)創(chuàng)建CREATE PROCEDURE list_stu_courseASSELECT s.sno, s.sname, s.ssex, o, ame, skc.grade , k.kcreditFROM student s,course c, kaike k,skcWHERE s.sno=skc.sno AND skc.kno=k.kno AND o=oGO2)執(zhí)行EXEC list_stu_course 或者list_stu_course3)功能分析_2、帶參數(shù)存儲過程并執(zhí)行1)創(chuàng)建CREATE PROC list_student_department

6、 (department char(20)ASBEGINSELECT sno,sname,ssex,snative,mname,dname FROM student,major,departmentWHERE student.mno=major.mno AND major.dno=department.dno AND dname=departmentEND 2)執(zhí)行EXEC list_student_department department=計(jì)算機(jī)3)功能分析_3、根據(jù)功能要求完成下面的任務(wù)在stuManag數(shù)據(jù)庫中創(chuàng)建一個(gè)名為proc_1的存儲過程,產(chǎn)生某門課程的選課學(xué)生情況列表,其中包括

7、課程號、課程名、學(xué)號、姓名、成績。要求輸入某門課程的課程號,得到上述信息。1)創(chuàng)建:CREATE PROCEDURE proc_1_ASSELECT o,ame,s.sno, s.sname, skc.gradeFROM student s,course c,skc,kaike kWHERE s.sno=skc.sno AND skc.kno=k.kno AND o=o AND o = cnoGO2)執(zhí)行:EXEC proc_1 010101或EXEC proc_1 _4、根據(jù)功能要求,完成下面任務(wù)在stuManag數(shù)據(jù)庫中,定義存儲過程proc_2,要求實(shí)現(xiàn)輸入學(xué)生學(xué)號,根據(jù)該學(xué)生所選課程的

8、平均成績顯示提示信息,即如果平均成績在60分以上,顯示“此學(xué)生綜合成績合格!”,否則顯示“此學(xué)生綜合成績不合格!”。1)創(chuàng)建:CREATE PROCEDURE proc_2sno char(10)_ASSELECT savg = avg(grade) FROM skcWHERE skc.sno = snoIF savg>=60 PRINT 此學(xué)生綜合成績合格!ELSEPRINT 此學(xué)生綜合成績不合格!GO(二)管理存儲過程1、查看存儲過程代碼EXEC sp_helptext list_student_departmentEXEC sp_helptext objname=list_stud

9、ent_department2、修改存儲過程ALTER PROC list_student_departmentdepartment char(20)ASBEGINSELECT dname,mname,COUNT(*) 學(xué)生人數(shù)FROM student,major,departmentWHERE student.mno=major.mno AND major.dno=department.dno AND dname=departmentGROUP BY dname,mnameEND3、刪除存儲過程DROP PROCEDURE list_stu_course (三)觸發(fā)器操作1、觸發(fā)器

10、創(chuàng)建及驗(yàn)證新建一個(gè)Test數(shù)據(jù)庫,然后在Test數(shù)據(jù)庫中完成下面內(nèi)容。在查詢分析器中輸入下面的代碼,思考其功能,運(yùn)行后,查看輸出結(jié)果。并描述每一部分的功能或者輸出結(jié)果。1)創(chuàng)建觸發(fā)器CREATE TABLE TestTable1 ( -創(chuàng)建表TestTable1)c1 INT,c2 CHAR(30)CREATE TRIGGER trig1 ON TestTable1 FOR INSERT,UPDATE,DELETEas SELECT * FROM TestTable1-下面兩個(gè)語句分開執(zhí)行INSERT TestTable1 VALUES(1,林沖)UPDATE TestTable1 SET c

11、2=宋江 WHERE c1=12)inserted表和deleted表的使用CREATE TRIGGER trig1ON TestTable1FOR INSERT,UPDATE,DELETEASPRINT inserted表:SELECT * FROM INSERTEDPRINT deleted表:SELECT * FROM DELETEDGO-下面三個(gè)語句分開執(zhí)行INSERT TestTable1 VALUES(2,吳用)UPDATE TestTable1 SET c2=關(guān)勝 WHERE c1=2DELETE TestTable1 WHERE c1=23)insert和update觸發(fā)器CR

12、EATE TABLE TestTable2(c1 INT,c2 CHAR(10)GOCREATE TRIGGER trig2 ON TestTable2 FOR INSERT,UPDATEASDECLARE c1_1 intSELECT c1_1=c1 FROM INSERTEDIF c1_1<1 OR c1_1>108BEGIN ROLLBACK RAISERROR(c1值必須在1到108之間!,16,1)ENDGO-下面三個(gè)語句分開執(zhí)行INSERT TestTable2 VALUES (200,武松)INSERT TestTable2 VALUES (15,武松)UPDATE

13、TestTable2 SET c1=300 WHERE c2=武松4)delete觸發(fā)器INSERT stu VALUES (03170356,陳功,男,17,廣東)INSERT study VALUES (03170356,1,88)INSERT study VALUES (03170356,2,99)GOCREATE TRIGGER trig3 ON stu FOR DELETEASDELETE study WHERE study.sno=(SELECT sno FROM DELETED)go-執(zhí)行下面語句DELETE FROM stu WHERE sno=031703565)instea

14、d of觸發(fā)器CREATE TRIGGER aa ON TestTable2 instead of INSERT, UPDATE, DELETE ASINSERT TestTable1 VALUES(100,1234)-執(zhí)行下面語句,然后查詢TestTable2表INSERT INTO TestTable2 VALUES (10,宋江)2、基于stuManag數(shù)據(jù),根據(jù)功能要求,完成T-SQL語句1)創(chuàng)建觸發(fā)器trigger_1,實(shí)現(xiàn)當(dāng)修改學(xué)生表(student)中的數(shù)據(jù)時(shí),顯示提示信息“學(xué)生表被修改了”。CREATE TRIGGER trigger_1 ON studentFOR_AS PR

15、INT 學(xué)生課程表被修改了GO2)創(chuàng)建觸發(fā)器trigger_2,實(shí)現(xiàn)當(dāng)刪除課程表中某門學(xué)生的記錄時(shí),對應(yīng)學(xué)生成績表中所有有關(guān)該學(xué)生的記錄均刪除。CREATE TRIGGER trigger_2 ON studentFOR DELETEAS DELETEFROM skcWHERE skc.sno=( _)GO3)創(chuàng)建觸發(fā)器trigger_3,實(shí)現(xiàn)當(dāng)修改學(xué)生課程表(course)中的某門課的課程號時(shí),對應(yīng)學(xué)生成績表(skc)中的課程號也作修改。當(dāng)修改學(xué)生課程表中記錄時(shí),相當(dāng)于刪除一條舊記錄并插入一條新記錄,刪除的舊記錄在deleted臨時(shí)表中,插入的新記錄在inserted臨時(shí)表中。因此,可以通過

16、在查詢分析器的查詢窗口中輸入如下語句創(chuàng)建觸發(fā)器:CREATE TRIGGER trigger_3 ON courseFOR UPDATEAS BEGINUPDATE skc SET kno=(SELECT kno FROM _)WHERE kno.sno=(SELECT kno from _)ENDGO3、刪除觸發(fā)器trigger_1_ trigger_1數(shù)據(jù)庫原理與應(yīng)用實(shí)驗(yàn)教材:高級實(shí)驗(yàn)內(nèi)容基于stuManag數(shù)據(jù)庫完成下面的任務(wù)1、創(chuàng)建一個(gè)存儲過程:當(dāng)任意輸入一個(gè)學(xué)生的姓名時(shí),將返回該學(xué)生的學(xué)號、選修的課程名稱和課程成績。并執(zhí)行該存儲過程,查詢“劉永強(qiáng)”的學(xué)號、選修課程和課程成績。2、創(chuàng)建一個(gè)存儲過程,要求實(shí)現(xiàn)如下功能:輸入學(xué)生學(xué)號,根據(jù)該學(xué)生所選課程的總學(xué)分顯示提示信息,如果總學(xué)分<9,則顯示“此學(xué)生所選總學(xué)分為XXX,學(xué)分不足!”,否則顯示“此學(xué)生所選總學(xué)分為XXX,學(xué)分已足!”。并調(diào)用修改后的存儲過程,顯示“02020101”學(xué)生的總學(xué)分情況。3、創(chuàng)建一個(gè)帶輸入?yún)?shù)和輸出參數(shù)的存儲過程,要求實(shí)現(xiàn)如下功能:輸入學(xué)生學(xué)號,然后輸出學(xué)生的選課門數(shù)、平均分以

溫馨提示

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

評論

0/150

提交評論