版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
觸發(fā)器觸發(fā)器觸發(fā)器概述問題的引入觸發(fā)器的概念觸發(fā)器的原理觸發(fā)器的分類觸發(fā)器的創(chuàng)建、修改及刪除應(yīng)用示例觸發(fā)器概述問題的引入增加一個(gè)記錄刪除一個(gè)記錄(“95003”,”002”,56)950010069041在[學(xué)生管理數(shù)據(jù)庫(kù)]中,某學(xué)生的[選課門數(shù)]是一個(gè)經(jīng)常訪問的屬性,因此在student表中增加一個(gè)屬性sselnum(smallint).在實(shí)際應(yīng)用實(shí)例展示觸發(fā)器概述考慮該問題涉及兩個(gè)表之間的關(guān)系,可否用參照完整性來(lái)實(shí)現(xiàn)?
可否用嵌套的SQL語(yǔ)句來(lái)實(shí)現(xiàn)?
問題的解決:使用觸發(fā)器triggerupdatestudentsetsselnum=(selectcount(*)froms_cwheres_c.sno=student.sno)存在的問題
觸發(fā)器的主要作用就是其能夠?qū)崿F(xiàn)由主鍵和外鍵所不能保證的復(fù)雜的參照完整性和數(shù)據(jù)的一致性
觸發(fā)器概述觸發(fā)器的概念觸發(fā)器是一種特殊類型的存儲(chǔ)過(guò)程。在SQLServer里面也就是對(duì)某一個(gè)表的一定的操作,觸發(fā)某種條件,從而執(zhí)行的一段程序。觸發(fā)器觸發(fā)原因?qū)Ρ磉M(jìn)行插入、更新或刪除操作觸發(fā)事件。觸發(fā)結(jié)果:另一段程序的執(zhí)行。思考:在上例中,觸發(fā)原因是什么?觸發(fā)結(jié)果是什么?觸發(fā)器概述觸發(fā)器和存儲(chǔ)過(guò)程的區(qū)別:INSERTINTOs_cVALUES(‘95001’,‘006’,90)EXECGetgrade‘95001'觸發(fā)器可以用于SQLServer約束、默認(rèn)值和規(guī)則的完整性檢查。觸發(fā)器主要是通過(guò)事件觸發(fā)而執(zhí)行的,而存儲(chǔ)過(guò)程是通過(guò)調(diào)用存儲(chǔ)過(guò)程名稱而執(zhí)行的。觸發(fā)器概述特殊性在于:l它與表緊密相連,不可以脫離表單獨(dú)存在。
l不允許使用參數(shù),沒有返回值。l不允許用戶調(diào)用,當(dāng)對(duì)表進(jìn)行插入、刪除、修改操作時(shí)由系統(tǒng)自動(dòng)調(diào)用并執(zhí)行(相當(dāng)于事件方法)。
觸發(fā)器概述觸發(fā)器可以實(shí)現(xiàn)比較復(fù)雜的完整性約束:l
擴(kuò)展約束、默認(rèn)值和規(guī)則對(duì)象的完整性檢查。l
自動(dòng)生成數(shù)據(jù)。l
檢查數(shù)據(jù)的修改,防止對(duì)數(shù)據(jù)不正確的修改,保證數(shù)據(jù)表之間數(shù)據(jù)的正確性和一致性。l
自定義復(fù)雜的安全權(quán)限。觸發(fā)器作為一種數(shù)據(jù)庫(kù)對(duì)象,在syscomment系統(tǒng)表中存儲(chǔ)其完整的定義信息,在sysobject系統(tǒng)表中有該對(duì)象的記錄。觸發(fā)器概述1)觸發(fā)器自動(dòng)執(zhí)行在對(duì)表的數(shù)據(jù)作了任何修改(比如手工輸入或者應(yīng)用程序采取的操作)之后立即被激活。3)觸發(fā)器可以實(shí)現(xiàn)比CHECK約束更為復(fù)雜的數(shù)據(jù)完整性約束在數(shù)據(jù)庫(kù)中為了實(shí)現(xiàn)數(shù)據(jù)完整性約束,可以使用CHECK約束或觸發(fā)器。CHECK約束不允許引用其它表中的列來(lái)完成檢查工作,而觸發(fā)器可以引用其它表中的列。2)觸發(fā)器能夠?qū)?shù)據(jù)庫(kù)中的相關(guān)表實(shí)現(xiàn)級(jí)聯(lián)更改觸發(fā)器是基于一個(gè)表創(chuàng)建的,但是可以針對(duì)多個(gè)表進(jìn)行操作,實(shí)現(xiàn)數(shù)據(jù)庫(kù)中相關(guān)表的級(jí)聯(lián)更改。觸發(fā)器概述AFTER類型觸發(fā)器:只有執(zhí)行某一操作(INSERTUPDATEDELETE)之后,觸發(fā)器才被觸發(fā)。只能在表上定義。觸發(fā)器的分類INSTEADOF觸發(fā)器:并不執(zhí)行其所定義的操作(INSERT、UPDATE、DELETE),而僅是執(zhí)行觸發(fā)器本身。既可在表上定義INSTEADOF觸發(fā)器,也可以在視圖上定義INSTEADOF觸發(fā)器。觸發(fā)器概述觸發(fā)器的原理Inserted表和Deleted表的理解:Inserted和Deleted是邏輯(概念)表。當(dāng)在定義了觸發(fā)器的表上發(fā)生了修改操作時(shí)會(huì)自動(dòng)派生出這兩個(gè)視圖。
當(dāng)在表上發(fā)生插入操作時(shí),新插入的行將出現(xiàn)在插入視圖中。當(dāng)在表上發(fā)生刪除操作時(shí),被刪除的行將出現(xiàn)在刪除視圖中。當(dāng)在表上發(fā)生更新操作時(shí),舊行出現(xiàn)在刪除視圖中,新行出現(xiàn)在插入視圖中。觸發(fā)器概述觸發(fā)器的原理Inserted表和Deleted表的理解:(1)如果基于S_C表的UPDATE操作定義了觸發(fā)器(2)再執(zhí)行語(yǔ)句:
UPDATES_CSETgrade=70WHEREsno=‘95001’ANDcno=‘001’
在UPDATE語(yǔ)句執(zhí)行過(guò)程中
Deleted表的內(nèi)容:
Inserted表的內(nèi)容:S_C表觸發(fā)器的創(chuàng)建觸發(fā)器的基本操作——?jiǎng)?chuàng)建在創(chuàng)建觸發(fā)器前,必須注意以下幾點(diǎn):1、CREATETRIGGER語(yǔ)句必須是批處理中的第一條語(yǔ)句。2、只能在當(dāng)前數(shù)據(jù)庫(kù)中創(chuàng)建觸發(fā)器,名稱必須遵循標(biāo)識(shí)符的命名規(guī)則。3、表的所有者具有創(chuàng)建觸發(fā)器的默認(rèn)權(quán)限,不能將該權(quán)限轉(zhuǎn)給其他用戶。4、不能在臨時(shí)表或系統(tǒng)表上創(chuàng)建觸發(fā)器,但是觸發(fā)器可以引用臨時(shí)表,但是不能引用系統(tǒng)表。觸發(fā)器的創(chuàng)建創(chuàng)建觸發(fā)器命令格式:CREATETRIGGERtrigger_nameONtabel
{FOR|AFTER|INSTEADOF}[INSERT],[UPDATE],[DELETE]AS[IFUPDATE(column)[{AND|OR}UPDATE(column)……]]
sql_statement
一、企業(yè)管理器二、查詢分析器觸發(fā)器的創(chuàng)建說(shuō)明:{FOR|AFTER|INSTEADOF}:FOR|AFTER:在數(shù)據(jù)變動(dòng)以后觸發(fā);INSTEADOF:在數(shù)據(jù)變動(dòng)以前觸發(fā);[INSERT|UPDATE|DELETE]:
分別對(duì)應(yīng)插入觸發(fā)器、修改觸發(fā)器、刪除觸發(fā)器觸發(fā)器的創(chuàng)建例:當(dāng)在倉(cāng)庫(kù)表上發(fā)生插入操作時(shí)會(huì)輸出“插入了一個(gè)倉(cāng)庫(kù)元組”的信息。USE倉(cāng)庫(kù)管理GOCREATETRIGGERWH_INON倉(cāng)庫(kù)FORINSERTAS
PRINT'插入了一個(gè)倉(cāng)庫(kù)元組'INSERT倉(cāng)庫(kù)VALUES('WH6','南京',700)觸發(fā)器的創(chuàng)建例:在倉(cāng)庫(kù)表上定義一個(gè)刪除觸發(fā)器,使得當(dāng)刪除倉(cāng)庫(kù)記錄時(shí),同時(shí)將所屬所有職工記錄的倉(cāng)庫(kù)號(hào)字段值置為空值NULL。CREATETRIGGERWH_DELON倉(cāng)庫(kù)FORDELETEASUPDATE職工SET倉(cāng)庫(kù)號(hào)=NULLWHERE倉(cāng)庫(kù)號(hào)IN(SELECT倉(cāng)庫(kù)號(hào)FROMdeleted)DELETE倉(cāng)庫(kù)WHERE倉(cāng)庫(kù)號(hào)='WH6'倉(cāng)庫(kù)(倉(cāng)庫(kù)號(hào),城市,面積)職工(倉(cāng)庫(kù)號(hào),職工號(hào),工資)觸發(fā)器的創(chuàng)建例:對(duì)S表定義一個(gè)刪除觸發(fā)器,使得當(dāng)刪除學(xué)生記錄時(shí),將S_C表中相應(yīng)的選課記錄刪除。S(SNO,SNAME)S_C(SNO,CNO,SCORE)觸發(fā)器的創(chuàng)建例:對(duì)職工表定義一個(gè)插入觸發(fā)器,使得當(dāng)插入職工記錄時(shí),檢查所參照的倉(cāng)庫(kù)元組是否存在,如果不存在,則撤消所做的插入操作。倉(cāng)庫(kù)(倉(cāng)庫(kù)號(hào),城市,面積)職工(倉(cāng)庫(kù)號(hào),職工號(hào),工資)觸發(fā)器的創(chuàng)建CREATETRIGGERWH_INSON職工FORINSERTASIFNOTEXISTS(SELECT*FROM倉(cāng)庫(kù)WHERE倉(cāng)庫(kù)號(hào)
=(SELECT倉(cāng)庫(kù)號(hào)FROMINSERTED))BEGIN
RAISERROR('非法倉(cāng)庫(kù)號(hào)!',1,1)
ROLLBACKTRANSACTIONENDINSERT職工VALUES('WH5','E10',1600)IN觸發(fā)器的創(chuàng)建例:對(duì)S_C表定義一個(gè)插入觸發(fā)器,使得當(dāng)插入選課記錄時(shí),檢查所參照的學(xué)生學(xué)號(hào)和課程號(hào)是否存在,如果不存在,則撤消所做的插入操作。S(SNO,SNAME)C(CNO,CNAME)S_C(SNO,CNO,SCORE)觸發(fā)器的創(chuàng)建例:對(duì)職工表定義一個(gè)更新觸發(fā)器,使得當(dāng)職工變換所屬倉(cāng)庫(kù)時(shí),檢查所參照的倉(cāng)庫(kù)元組是否存在,如果不存在,則撤消所做的更新操作,如果新的倉(cāng)庫(kù)號(hào)是WH2則將工資提高10%。觸發(fā)器的創(chuàng)建CREATETRIGGERTR_UPDATEON職工FORUPDATEASDECLARE@WHNOCHAR(4)IFUPDATE(倉(cāng)庫(kù)號(hào))BEGINIFNOTEXISTS(SELECT*FROM倉(cāng)庫(kù)WHERE倉(cāng)庫(kù)號(hào)=(SELECT倉(cāng)庫(kù)號(hào)FROMINSERTED))BEGINRAISERROR('非法倉(cāng)庫(kù)號(hào)!',16,1)
ROLLBACKTRANSACTIONENDELSEBEGINSELECT@WHNO=倉(cāng)庫(kù)號(hào)FROMINSERTEDIF@WHNO='WH2'UPDATE職工SET工資=工資*1.1
WHERE職工號(hào)=(SELECT職工號(hào)FROMINSERTED)ENDEND觸發(fā)器的創(chuàng)建例:當(dāng)插入或更新學(xué)生成績(jī)時(shí),觸發(fā)器檢查該課程是否為考查課,若是,則通過(guò)的成績(jī)只能以60分計(jì),未通過(guò)的只能以40分計(jì)。涉及的表結(jié)構(gòu):C1(Cno,Cname,Ctype)
S_C(Sno,Cno,Score)觸發(fā)器的創(chuàng)建CREATETRIGGERSCORE_KCONS_CFORINSERT,UPDATEASDECLARE@SCOREINT,@CTYPECHAR(4)SELECT@SCORE=SCORE,@CTYPE=CTYPEFROMC1,INSERTEDWHEREINSERTED.CNO=C1.CNOIF(@CTYPE='考查')AND(@SCORE<>60AND@SCORE<>40)BEGINRAISERROR('該課程為考查課,成績(jī)以60或40計(jì)!',16,1)
ROLLBACKTRANSACTIONEND觸發(fā)器的創(chuàng)建CREATETRIGGERSCORE_KCONS_CFORINSERT,UPDATEAS
DECLARE@SCOREINT,@CTYPECHAR(4)SELECT@SCORE=SCORE,@CTYPE=CTYPEFROMC1,INSERTEDWHEREINSERTED.CNO=C1.CNOIF(@CTYPE='考查')BEGINIF@SCORE>=60UPDATES_CSETSCORE=60WHERECNO=(SELECTCNOFROMINSERTED)ANDSNO=(SELECTSNOFROMINSERTED)ELSEUPDATES_CSETSCORE=40WHERECNO=(SELECTCNOFROMINSERTED)ANDSNO=(SELECTSNOFROMINSERTED)END觸發(fā)器的修改修改觸發(fā)器命令格式:ALTERTRIGGERtrigger_nameONtab
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 部編版2023-2024學(xué)年七年級(jí)上學(xué)期語(yǔ)文《雨的四季》同步培優(yōu)練習(xí)
- 考試焦慮量表社會(huì)支持量表與應(yīng)對(duì)方式量表
- 賦強(qiáng)防脫保濕洗發(fā)露測(cè)試反饋(80A+護(hù)發(fā)素)
- 汽車變速器相關(guān)行業(yè)投資規(guī)劃報(bào)告
- 各種氣象要素智能傳感器行業(yè)相關(guān)投資計(jì)劃提議范本
- 《 第一章 豐富的圖形世界》單元提升測(cè)試卷 2024-2025學(xué)年北師大版七年級(jí)數(shù)學(xué)上冊(cè)
- 家居棉品相關(guān)行業(yè)投資方案
- 權(quán)重建模的并行化方法
- 營(yíng)養(yǎng)膳食行業(yè)的政策與法規(guī)影響
- 指數(shù)同步練習(xí) 高一上學(xué)期數(shù)學(xué)人教A版(2019)必修第一冊(cè)
- 2024年度-女性私密健康課件
- 網(wǎng)上信息搜索課件
- 人際溝通與協(xié)調(diào)技巧
- 家長(zhǎng)會(huì)習(xí)慣養(yǎng)成示范課件教育孩子遵紀(jì)守法的習(xí)慣
- 游戲行業(yè)產(chǎn)品研發(fā)與運(yùn)營(yíng)策劃書
- 電機(jī)的選型計(jì)算課件
- 2024年遼寧省成考(專升本)大學(xué)政治考試真題含解析
- 人教版六年級(jí)數(shù)學(xué)下冊(cè)全冊(cè)分層作業(yè)設(shè)計(jì)含答案
- 景區(qū)經(jīng)營(yíng)分析報(bào)告
- 食品安全總監(jiān)和食品安全員任命書
- 《有意義的人生》課件
評(píng)論
0/150
提交評(píng)論