數據庫觸發器_第1頁
數據庫觸發器_第2頁
數據庫觸發器_第3頁
數據庫觸發器_第4頁
數據庫觸發器_第5頁
已閱讀5頁,還剩23頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

觸發器觸發器觸發器概述問題的引入觸發器的概念觸發器的原理觸發器的分類觸發器的創建、修改及刪除應用示例觸發器概述問題的引入增加一個記錄刪除一個記錄(“95003”,”002”,56)950010069041在[學生管理數據庫]中,某學生的[選課門數]是一個經常訪問的屬性,因此在student表中增加一個屬性sselnum(smallint).在實際應用實例展示觸發器概述考慮該問題涉及兩個表之間的關系,可否用參照完整性來實現?

可否用嵌套的SQL語句來實現?

問題的解決:使用觸發器triggerupdatestudentsetsselnum=(selectcount(*)froms_cwheres_c.sno=student.sno)存在的問題

觸發器的主要作用就是其能夠實現由主鍵和外鍵所不能保證的復雜的參照完整性和數據的一致性

觸發器概述觸發器的概念觸發器是一種特殊類型的存儲過程。在SQLServer里面也就是對某一個表的一定的操作,觸發某種條件,從而執行的一段程序。觸發器觸發原因對表進行插入、更新或刪除操作觸發事件。觸發結果:另一段程序的執行。思考:在上例中,觸發原因是什么?觸發結果是什么?觸發器概述觸發器和存儲過程的區別:INSERTINTOs_cVALUES(‘95001’,‘006’,90)EXECGetgrade‘95001'觸發器可以用于SQLServer約束、默認值和規則的完整性檢查。觸發器主要是通過事件觸發而執行的,而存儲過程是通過調用存儲過程名稱而執行的。觸發器概述特殊性在于:l它與表緊密相連,不可以脫離表單獨存在。

l不允許使用參數,沒有返回值。l不允許用戶調用,當對表進行插入、刪除、修改操作時由系統自動調用并執行(相當于事件方法)。

觸發器概述觸發器可以實現比較復雜的完整性約束:l

擴展約束、默認值和規則對象的完整性檢查。l

自動生成數據。l

檢查數據的修改,防止對數據不正確的修改,保證數據表之間數據的正確性和一致性。l

自定義復雜的安全權限。觸發器作為一種數據庫對象,在syscomment系統表中存儲其完整的定義信息,在sysobject系統表中有該對象的記錄。觸發器概述1)觸發器自動執行在對表的數據作了任何修改(比如手工輸入或者應用程序采取的操作)之后立即被激活。3)觸發器可以實現比CHECK約束更為復雜的數據完整性約束在數據庫中為了實現數據完整性約束,可以使用CHECK約束或觸發器。CHECK約束不允許引用其它表中的列來完成檢查工作,而觸發器可以引用其它表中的列。2)觸發器能夠對數據庫中的相關表實現級聯更改觸發器是基于一個表創建的,但是可以針對多個表進行操作,實現數據庫中相關表的級聯更改。觸發器概述AFTER類型觸發器:只有執行某一操作(INSERTUPDATEDELETE)之后,觸發器才被觸發。只能在表上定義。觸發器的分類INSTEADOF觸發器:并不執行其所定義的操作(INSERT、UPDATE、DELETE),而僅是執行觸發器本身。既可在表上定義INSTEADOF觸發器,也可以在視圖上定義INSTEADOF觸發器。觸發器概述觸發器的原理Inserted表和Deleted表的理解:Inserted和Deleted是邏輯(概念)表。當在定義了觸發器的表上發生了修改操作時會自動派生出這兩個視圖。

當在表上發生插入操作時,新插入的行將出現在插入視圖中。當在表上發生刪除操作時,被刪除的行將出現在刪除視圖中。當在表上發生更新操作時,舊行出現在刪除視圖中,新行出現在插入視圖中。觸發器概述觸發器的原理Inserted表和Deleted表的理解:(1)如果基于S_C表的UPDATE操作定義了觸發器(2)再執行語句:

UPDATES_CSETgrade=70WHEREsno=‘95001’ANDcno=‘001’

在UPDATE語句執行過程中

Deleted表的內容:

Inserted表的內容:S_C表觸發器的創建觸發器的基本操作——創建在創建觸發器前,必須注意以下幾點:1、CREATETRIGGER語句必須是批處理中的第一條語句。2、只能在當前數據庫中創建觸發器,名稱必須遵循標識符的命名規則。3、表的所有者具有創建觸發器的默認權限,不能將該權限轉給其他用戶。4、不能在臨時表或系統表上創建觸發器,但是觸發器可以引用臨時表,但是不能引用系統表。觸發器的創建創建觸發器命令格式:CREATETRIGGERtrigger_nameONtabel

{FOR|AFTER|INSTEADOF}[INSERT],[UPDATE],[DELETE]AS[IFUPDATE(column)[{AND|OR}UPDATE(column)……]]

sql_statement

一、企業管理器二、查詢分析器觸發器的創建說明:{FOR|AFTER|INSTEADOF}:FOR|AFTER:在數據變動以后觸發;INSTEADOF:在數據變動以前觸發;[INSERT|UPDATE|DELETE]:

分別對應插入觸發器、修改觸發器、刪除觸發器觸發器的創建例:當在倉庫表上發生插入操作時會輸出“插入了一個倉庫元組”的信息。USE倉庫管理GOCREATETRIGGERWH_INON倉庫FORINSERTAS

PRINT'插入了一個倉庫元組'INSERT倉庫VALUES('WH6','南京',700)觸發器的創建例:在倉庫表上定義一個刪除觸發器,使得當刪除倉庫記錄時,同時將所屬所有職工記錄的倉庫號字段值置為空值NULL。CREATETRIGGERWH_DELON倉庫FORDELETEASUPDATE職工SET倉庫號=NULLWHERE倉庫號IN(SELECT倉庫號FROMdeleted)DELETE倉庫WHERE倉庫號='WH6'倉庫(倉庫號,城市,面積)職工(倉庫號,職工號,工資)觸發器的創建例:對S表定義一個刪除觸發器,使得當刪除學生記錄時,將S_C表中相應的選課記錄刪除。S(SNO,SNAME)S_C(SNO,CNO,SCORE)觸發器的創建例:對職工表定義一個插入觸發器,使得當插入職工記錄時,檢查所參照的倉庫元組是否存在,如果不存在,則撤消所做的插入操作。倉庫(倉庫號,城市,面積)職工(倉庫號,職工號,工資)觸發器的創建CREATETRIGGERWH_INSON職工FORINSERTASIFNOTEXISTS(SELECT*FROM倉庫WHERE倉庫號

=(SELECT倉庫號FROMINSERTED))BEGIN

RAISERROR('非法倉庫號!',1,1)

ROLLBACKTRANSACTIONENDINSERT職工VALUES('WH5','E10',1600)IN觸發器的創建例:對S_C表定義一個插入觸發器,使得當插入選課記錄時,檢查所參照的學生學號和課程號是否存在,如果不存在,則撤消所做的插入操作。S(SNO,SNAME)C(CNO,CNAME)S_C(SNO,CNO,SCORE)觸發器的創建例:對職工表定義一個更新觸發器,使得當職工變換所屬倉庫時,檢查所參照的倉庫元組是否存在,如果不存在,則撤消所做的更新操作,如果新的倉庫號是WH2則將工資提高10%。觸發器的創建CREATETRIGGERTR_UPDATEON職工FORUPDATEASDECLARE@WHNOCHAR(4)IFUPDATE(倉庫號)BEGINIFNOTEXISTS(SELECT*FROM倉庫WHERE倉庫號=(SELECT倉庫號FROMINSERTED))BEGINRAISERROR('非法倉庫號!',16,1)

ROLLBACKTRANSACTIONENDELSEBEGINSELECT@WHNO=倉庫號FROMINSERTEDIF@WHNO='WH2'UPDATE職工SET工資=工資*1.1

WHERE職工號=(SELECT職工號FROMINSERTED)ENDEND觸發器的創建例:當插入或更新學生成績時,觸發器檢查該課程是否為考查課,若是,則通過的成績只能以60分計,未通過的只能以40分計。涉及的表結構:C1(Cno,Cname,Ctype)

S_C(Sno,Cno,Score)觸發器的創建CREATETRIGGERSCORE_KCONS_CFORINSERT,UPDATEASDECLARE@SCOREINT,@CTYPECHAR(4)SELECT@SCORE=SCORE,@CTYPE=CTYPEFROMC1,INSERTEDWHEREINSERTED.CNO=C1.CNOIF(@CTYPE='考查')AND(@SCORE<>60AND@SCORE<>40)BEGINRAISERROR('該課程為考查課,成績以60或40計!',16,1)

ROLLBACKTRANSACTIONEND觸發器的創建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觸發器的修改修改觸發器命令格式:ALTERTRIGGERtrigger_nameONtab

溫馨提示

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

最新文檔

評論

0/150

提交評論