關(guān)系數(shù)據(jù)庫設(shè)計(jì)與應(yīng)用(工作手冊式) 實(shí)訓(xùn)報(bào)告答案 實(shí)訓(xùn)14 觸發(fā)器_第1頁
關(guān)系數(shù)據(jù)庫設(shè)計(jì)與應(yīng)用(工作手冊式) 實(shí)訓(xùn)報(bào)告答案 實(shí)訓(xùn)14 觸發(fā)器_第2頁
關(guān)系數(shù)據(jù)庫設(shè)計(jì)與應(yīng)用(工作手冊式) 實(shí)訓(xùn)報(bào)告答案 實(shí)訓(xùn)14 觸發(fā)器_第3頁
關(guān)系數(shù)據(jù)庫設(shè)計(jì)與應(yīng)用(工作手冊式) 實(shí)訓(xùn)報(bào)告答案 實(shí)訓(xùn)14 觸發(fā)器_第4頁
關(guān)系數(shù)據(jù)庫設(shè)計(jì)與應(yīng)用(工作手冊式) 實(shí)訓(xùn)報(bào)告答案 實(shí)訓(xùn)14 觸發(fā)器_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

實(shí)訓(xùn)14觸發(fā)器實(shí)訓(xùn)目的1.掌握觸發(fā)器的創(chuàng)建、修改和刪除操作;2.掌握觸發(fā)器的觸發(fā)執(zhí)行;3.理解觸發(fā)器與約束的不同。實(shí)訓(xùn)重難點(diǎn)1.觸發(fā)器的創(chuàng)建;2.觸發(fā)器的執(zhí)行原理(難點(diǎn))。實(shí)訓(xùn)準(zhǔn)備請附加數(shù)據(jù)庫,相關(guān)操作詳見實(shí)訓(xùn)6中的“實(shí)訓(xùn)準(zhǔn)備”。除了使用約束來完成數(shù)據(jù)的用戶自定義完整性,還可以使用觸發(fā)器來實(shí)現(xiàn)用戶自定義完整性。本書介紹了DML觸發(fā)器,它有三種類型:INSERT觸發(fā)器、UPDATE觸發(fā)器和DELETE觸發(fā)器。實(shí)訓(xùn)內(nèi)容第一題【存儲過程與觸發(fā)器的比較】1.設(shè)計(jì)一個存儲過程proc_update,當(dāng)向零件表中修改某指定零件名稱時(shí),如果該零件在供應(yīng)零件表中已有記錄,則提示“該零件名稱不能進(jìn)行修改”,并拒絕修改,否則可以修改。參考答案:createprocedureproc_update@零件代號char(5),@零件名稱varchar(50)asbeginifnotexists(select*from零件where零件代號=@零件代號)update零件set零件名=@零件名稱where零件代號=@零件代號elseprint'該零件名稱不能進(jìn)行修改'end--調(diào)用過程:execproc_update'P01','新的零件名稱'2.設(shè)計(jì)一個觸發(fā)器trigger_update,當(dāng)向零件表中修改零件名稱時(shí)觸發(fā)該觸發(fā)器,如果該零件在供應(yīng)零件表中已有記錄,則該零件名稱不能進(jìn)行修改,否則可以修改。參考答案:createtriggertrigger_updateon零件forupdate--inserteddeletedasbegin ifupdate(零件名) beginifexists(select*from供應(yīng)零件A innerjoininsertedonA.零件代號=inserted.零件代號)rollbacktransactionendend--調(diào)用:update零件set零件名='PP01'where零件代號='P08'第二題【觸發(fā)器練習(xí)】1.在零件表中編寫update觸發(fā)器sc_update,將其修改前后的信息保存在SC_log表中:SC_log(id,零件代號,零件名稱,規(guī)格,修改時(shí)間)。提示:請先創(chuàng)建SC_log表,字段類型參照零件表。參考答案:先創(chuàng)建SC_log表:createtablesc_log(idintidentity(1,1),零件代號char(5)notnull,零件名稱varchar(50)notnull,規(guī)格char(8)notnull,修改時(shí)間datetime)--插入一條數(shù)據(jù):insertintosc_log(零件代號,零件名稱,規(guī)格,修改時(shí)間)values('P09','PP08','GG08','2022-04-1712:00:00')--查詢sc_log表select*fromsc_log編寫觸發(fā)器:createtriggersc_updateon零件forupdate--deletedinsertedasbegininsertintosc_log(零件代號,零件名稱,規(guī)格)select零件代號,零件名,規(guī)格fromdeletedinsertintosc_log(零件代號,零件名稱,規(guī)格)select零件代號,零件名,規(guī)格frominsertedend--測試語句:update零件set規(guī)格='GG08'--查詢sc_log表select*fromsc_log2.在工程表中編寫update觸發(fā)器gc_update,當(dāng)修改“預(yù)算”字段時(shí),如果修改后的預(yù)算超過100000元,則提示“預(yù)算已超上限”,修改不能實(shí)現(xiàn),否則可以修改。參考答案:--創(chuàng)建觸發(fā)器createtriggergc_updateon工程forupdate--deletedinsertedasbeginifupdate(預(yù)算)beginifexists(select*frominsertedwhere預(yù)算>100000) print'預(yù)算已超上限100000' rollbacktransactionendend--測試語句:update工程set預(yù)算=110000where工程代號='J01'3.以下兩條語句的執(zhí)行結(jié)果有何不同,為什么?UPDATE工程SET預(yù)算=110000WHERE工程代號='J01'UPDATE工程SET預(yù)算=120000WHERE工程代號='J01'參考答案:本題考查的是觸發(fā)器和檢查約束的用法,所以這里如果需要驗(yàn)證,可以給工程表加一個檢查約束,然后執(zhí)行后就有區(qū)別了。--添加一個檢查約束:ALTERTABLE工程ADDCONSTRAINTCHK_預(yù)算CHECK(預(yù)算>=0AND預(yù)算<=110000)UPDATE工程SET預(yù)算=110000WHERE工程代號

溫馨提示

  • 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

提交評論