第12章 創(chuàng)建和使用觸發(fā)器.ppt_第1頁
第12章 創(chuàng)建和使用觸發(fā)器.ppt_第2頁
第12章 創(chuàng)建和使用觸發(fā)器.ppt_第3頁
第12章 創(chuàng)建和使用觸發(fā)器.ppt_第4頁
第12章 創(chuàng)建和使用觸發(fā)器.ppt_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第12章 創(chuàng)建和使用觸發(fā)器,觸發(fā)器也是一種存儲過程。它是一種在基本表被修改時自動執(zhí)行的內(nèi)嵌過程,它主要是通過事件進(jìn)行觸發(fā)而被執(zhí)行。在本章中我們將對觸發(fā)器的概念、作用以及對其的使用方法作詳盡介紹,使讀者了解如何定義觸發(fā)器,創(chuàng)建和使用各種不同復(fù)雜程度的觸發(fā)器。,12.1 觸發(fā)器概述,觸發(fā)器是一種特殊類型的存儲過程,它不同于我們前面介紹過的存儲過程。本節(jié)將首先介紹觸發(fā)器的基本概念、觸發(fā)器的優(yōu)點(diǎn)和分類。,12.1.1 觸發(fā)器的基本概念,觸發(fā)器主要是通過事件進(jìn)行觸發(fā)而被執(zhí)行的,而存儲過程可以通過存儲過程名字而被直接調(diào)用。當(dāng)對某一表進(jìn)行操作時(如UPDATE、INSERT、DELETE),SQL Serv

2、er就會自動執(zhí)行觸發(fā)器所定義的SQL語句,從而確保對數(shù)據(jù)的處理必須符合由這些SQL語句所定義的規(guī)則。 對于復(fù)雜的參照完整性和數(shù)據(jù)的一致性來說,僅僅使用主鍵和外鍵來提供保證是不夠的,需要通過觸發(fā)器來作為重要的補(bǔ)充,這也是觸發(fā)器的主要作用。除此之外,觸發(fā)器還有其它許多不同的功能??偟膩碚f,觸發(fā)器可以解決高級形式的業(yè)務(wù)規(guī)則或復(fù)雜行為限制,以及實(shí)現(xiàn)定制記錄等一些方面的問題。,12.1.2 使用觸發(fā)器的優(yōu)點(diǎn),由于在觸發(fā)器中可以包含復(fù)雜的處理邏輯。因此,應(yīng)該將觸發(fā)器用來保持低級的數(shù)據(jù)的完整性,而不是返回大量的查詢結(jié)果。使用觸發(fā)器主要可以實(shí)現(xiàn)以下操作: 1強(qiáng)制比CHECK約束更復(fù)雜的數(shù)據(jù)的完整性 2使用自定

3、義的錯誤提示信息 3跟蹤變化(Auditing changes) 4存儲過程的調(diào)用(Stored procedure invocation) 5實(shí)現(xiàn)數(shù)據(jù)庫中多張表的級聯(lián)修改 6比較數(shù)據(jù)庫修改前后數(shù)據(jù)的狀態(tài) 7維護(hù)規(guī)范化數(shù)據(jù),12.1.3 觸發(fā)器的分類,在SQL Server 2008中,觸發(fā)器可以分為兩大類:DML觸發(fā)器和DDL觸發(fā)器。 1DML觸發(fā)器 DML觸發(fā)器是當(dāng)數(shù)據(jù)庫服務(wù)器中發(fā)生數(shù)據(jù)操作語言(Data Manipulation Language)事件時執(zhí)行的存儲過程。DML觸發(fā)器又分為兩類:After觸發(fā)器和Instead Of觸發(fā)器。 2DDL觸發(fā)器 DDL觸發(fā)器是在響應(yīng)數(shù)據(jù)定義語言

4、(Data Definition Language)事件時執(zhí)行的存儲過程。DDL觸發(fā)器一般用于執(zhí)行數(shù)據(jù)庫中管理任務(wù)。例如審核和規(guī)范數(shù)據(jù)庫操作、防止數(shù)據(jù)庫表結(jié)構(gòu)被修改等。,12.2 使用SQL Server 2008創(chuàng)建DML觸發(fā)器,DML觸發(fā)器是當(dāng)數(shù)據(jù)庫服務(wù)器中發(fā)生數(shù)據(jù)操作語言(DML)事件(如UPDATE、INSERT、DELETE)時要執(zhí)行的操作,它用于在數(shù)據(jù)被修改時強(qiáng)制執(zhí)行業(yè)務(wù)規(guī)則,并擴(kuò)展SQL Server 2008約束、默認(rèn)值和規(guī)則的完整性檢查邏輯。本節(jié)將對DML觸發(fā)器的創(chuàng)建和管理展開學(xué)習(xí)。,12.2.1 DML觸發(fā)器的工作原理,1After觸發(fā)器的工作原理 After觸發(fā)器是在記錄

5、變更完成之后才被激活執(zhí)行的。以刪除記錄為例,當(dāng)SQL Server接收到一個要執(zhí)行刪除操作的SQL語句時,SQL Server先將要刪除的記錄存放在刪除表里。然后把數(shù)據(jù)表里的記錄刪除,再激活A(yù)fter觸發(fā)器,執(zhí)行After觸發(fā)器里的SQL語句。執(zhí)行完畢之后,刪除內(nèi)存中的刪除表,退出整個操作。 2Instead Of觸發(fā)器的工作原理 Instead Of觸發(fā)器與After觸發(fā)器不同。After觸發(fā)器是在Insert、Update和Delete操作完成后才激活的;而Instead Of觸發(fā)器是在這些操作進(jìn)行之前就激活了,并且不再去執(zhí)行原來的SQL操作,而去運(yùn)行觸發(fā)器本身的SQL語句。,12.2.2

6、 設(shè)計(jì)DML觸發(fā)器的注意事項(xiàng),在對作為觸發(fā)操作的目標(biāo)的表或視圖使用了下面的SQL語句時,不允許在DML觸發(fā)器里再使用這些語句,如表12.2為在目標(biāo)表中使用過的,DML觸發(fā)器不能再使用的語句。,12.2.3 創(chuàng)建DML觸發(fā)器的一般形式,創(chuàng)建DML觸發(fā)器的基本語法如下: CREATE TRIGGER trigger_name ON table|view FOR|AFTER|INSTEAD OF INSERT,UPDATE,DELETE WITH ENCRYPTION AS IF UPDATE(column_name) and|or UPDATE (column name) sql_statesme

7、nts,12.2.4 使用UPDATE觸發(fā)器檢查特定的列,在帶有UPDATE觸發(fā)器的表上執(zhí)行UPDATE語句時,將觸發(fā)UPDATE觸發(fā)器。使用UPDATE觸發(fā)器時,用戶可以通過定義IF UPDATE(column name)語句來實(shí)現(xiàn)。當(dāng)特定列被更新時觸發(fā)觸發(fā)器,而不管更新影響的是表中的一行還是多行。如果用戶需要實(shí)現(xiàn)多個特定列中的任意一列被更新時觸發(fā)觸發(fā)器,可以在觸發(fā)器定義中通過使用多個IF UPDATE(column name)語句來實(shí)現(xiàn)。,12.3 使用SQL Server 2008管理DML觸發(fā)器,在上一節(jié)中學(xué)習(xí)了DML觸發(fā)器的創(chuàng)建方法,在本節(jié)中我們將學(xué)習(xí)DML觸發(fā)器的管理方法。,12.

8、3.1 查看觸發(fā)器信息,在SQL Server 2008中可以使用SQL Server Management Studio、系統(tǒng)存儲過程和系統(tǒng)表來查看觸發(fā)器信息。 1使用SQL Server Management Studio查看觸發(fā)器 2使用系統(tǒng)存儲過程 3使用系統(tǒng)表,12.3.2 修改觸發(fā)器,通過使用SQL Server Management Studio窗口或系統(tǒng)存儲過程或Transaction SQL命令,可以修改觸發(fā)器的名字和正文。 1使用系統(tǒng)存儲過程重命名觸發(fā)器 2通過SQL Server Management Studio重命名觸發(fā)器 3直接通過T-SQL代碼修改觸發(fā)器,12.3

9、.3 刪除觸發(fā)器,刪除已創(chuàng)建的觸發(fā)器有以下3種方法。 使用命令DROP TRIGGER刪除指定的觸發(fā)器,刪除觸發(fā)器的具體語法形式如下: DROP TRIGGER trigger name,12.3.4 禁止和啟動觸發(fā)器,在使用觸發(fā)器時,用戶可能會遇到需要禁止某個觸發(fā)器起作用的場合。例如,用戶需要向某個有INSERT觸發(fā)器的表中插入大量數(shù)據(jù)。當(dāng)一個觸發(fā)器被禁止,該觸發(fā)器仍然存在于表上,只是觸發(fā)器的動作將不再執(zhí)行,直到該觸發(fā)器被重新用。 1使用SQL Server Management Studio禁止和啟動觸發(fā)器 2使用T-SQL語句禁止和啟動觸發(fā)器,12.3.5 觸發(fā)器的嵌套,當(dāng)一個觸發(fā)器執(zhí)行

10、時,能夠激活另一個觸發(fā)器,這種情況就是觸發(fā)器的嵌套。在SQL Server 2008里,觸發(fā)器能夠嵌套到32層。如果不想對觸發(fā)器進(jìn)行嵌套的話,可以通過【允許觸發(fā)器激活其他觸發(fā)器】的服務(wù)器配置選項(xiàng)來控制。 在【對象資源管理器】面板中,右擊服務(wù)器名,在彈出的對話框中選擇【屬性】選項(xiàng),單擊【高級】節(jié)點(diǎn)并在【雜項(xiàng)】里設(shè)置【允許觸發(fā)器激活其他觸發(fā)器】為True或False。,12.3.6 觸發(fā)器的遞歸,觸發(fā)器的遞歸是指,一個觸發(fā)器從其內(nèi)部又一次激活該觸發(fā)器。例如,一個Insert觸發(fā)器的內(nèi)部還有一條對本數(shù)據(jù)表插入記錄的SQL語句,那么這個插入語句就有可能再一次激活這個觸發(fā)器本身。當(dāng)然,這種遞歸的觸發(fā)器內(nèi)

11、部還會有判斷語句,要一定的情況下才會執(zhí)行那個SQL語句,否則的話,就會變成死循環(huán)了。,12.4 使用SQL Server 2008創(chuàng)建和管理DDL觸發(fā)器,DDL觸發(fā)器是從SQL Server 2005起新增的一個觸發(fā)器類型,是一種特殊的觸發(fā)器。它在響應(yīng)數(shù)據(jù)定義語言(DDL)語句時觸發(fā)。一般用于數(shù)據(jù)庫中執(zhí)行管理任務(wù)。本節(jié)我們將學(xué)習(xí)在SQL Server 2008中使用DDL觸發(fā)器。,12.4.1 DDL觸發(fā)器概述,與DML觸發(fā)器一樣,DDL觸發(fā)器也是通過事件來激活,并執(zhí)行其中的SQL語句的。但與DML觸發(fā)器不同,DML觸發(fā)器是響應(yīng)Insert、Update或Delete語句而激活的,DDL觸發(fā)器

12、是響應(yīng)Create、Alter或Drop開頭的語句而激活的。一般來說,在以下幾種情況下可以使用DDL觸發(fā)器: 數(shù)據(jù)庫里的庫架構(gòu)或數(shù)據(jù)表架構(gòu)很重要,不允許被修改。 防止數(shù)據(jù)庫或數(shù)據(jù)表被誤操作刪除。 在修改某個數(shù)據(jù)表結(jié)構(gòu)的同時修改另一個數(shù)據(jù)表的相應(yīng)的結(jié)構(gòu)。 要記錄對數(shù)據(jù)庫結(jié)構(gòu)操作的事件。,12.4.2 創(chuàng)建DDL觸發(fā)器,建立DDL觸發(fā)器的語法代碼如下: CREATE TRIGGER trigger_name ON ALL SERVER | DATABASE WITH ,.n FOR | AFTER event_type | event_group ,.n AS sql_statement ; .n

13、 | EXTERNAL NAME ; ,12.4.3 查看DDL觸發(fā)器,前面已經(jīng)提到,DDL觸發(fā)器有兩種,一種是作用在當(dāng)前SQL Server服務(wù)器上的,一種是作用在當(dāng)前數(shù)據(jù)庫中的。這兩種DDL觸發(fā)器在Management Studio中所在的位置是不同的。,12.4.4 修改DDL觸發(fā)器,在Management Studio如果要修改DDL觸發(fā)器內(nèi)容,就只能先刪除該觸發(fā)器,再重新建立一個DDL觸發(fā)器。雖然在Management Studio中沒有直接提供修改DDL觸發(fā)器的對話框,但在【查詢編輯器】對話框里依然可以用SQL語句來進(jìn)行修改。下面給出幾個對DDL觸發(fā)器操作常用的SQL代碼,由于對DDL觸發(fā)器的操作和對DML觸發(fā)器的操作類似,因此不再詳細(xì)說明用法。 刪除DDL觸發(fā)器:DROP TRIGGER(Transact-SQL)。 修改DDL觸發(fā)器:ALTER TRIGGER(Transact-SQL)。 重命名DDL觸發(fā)器:sp_rename(Transact-SQL)。 禁用DDL觸發(fā)器:DISABLE TRIGGER(Transact-SQL)。 啟用DDL觸發(fā)器:ENABLE TRIGGER(Transact-SQL)。,12.5 小結(jié),在本章中,我們學(xué)習(xí)了D

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論