什麼是觸發器:
觸發器是一種特殊型別的儲存過程,它在指定的表中的資料發生變化時自動生效。本節將介紹觸發器的基本概念,以及建立和管理觸發器的方法。
觸發器是乙個在修改指定錶值的資料時執行的儲存過程,不同的是執行儲存過程要使用
exec
語句來呼叫,而觸發器的執行不需要使用
exec
語句來呼叫,通過建立觸發器可以保證不同表中的邏輯相關資料的引用完整性或一致性。
觸發器與普通儲存過程的不同之處在於:觸發器的執行是由事件觸發的,而普通儲存過程是由命令呼叫執行的。
觸發器的優點:
觸發器是自動的。當對表中的資料做了任何的修改之後可以立即被啟用。
觸發器可以通過資料可中的相關表進行層疊更改。
觸發器可以強制限制。這些限制比check約束所定義的更複雜,與check約束不同的是,觸發器可以應用其他表中的列。
觸發器的作用:
觸發器的主要作用就是其能夠實現由主鍵和外來鍵所不能保證的複雜的參照完整性和資料的一致性,它能夠對資料庫中的相關表進行級聯修改,能提供比
check
約束更複雜的資料完整性,並自定義錯誤資訊。觸發器的主要作用有以下幾個方面:
強制資料庫之間的應用完整性。
級聯修改資料庫中所有相關的表,自動觸發其他與之相關的操作。
跟蹤變化,撤銷或回滾違法操作,防止非法修改資料。
返回自定義的錯誤資訊,約束無法返回資訊,而觸發器可以。
觸發器可以呼叫更多的儲存過程。
觸發器的分類:
sql server
提供了兩種觸發器選項,即
dml觸發器和
ddl觸發器。
資料操作語言(dml——datamanipulation language)觸發器:
dml觸發器是對sql server 2000觸發器的繼承,它包括以下3種型別:
after觸發器 在執行了insert、update或delete語句操作之後執行after觸發器。指定after與指定for相同,而後者是sql server早期版本中唯一可使用的選項。after觸發器只能在表上指定。
instead of觸發器執行instead of觸發器以代替引發觸發器的資料庫操作。
clr觸發器 可以是after觸發器或instead of觸發器,還可以是ddl觸發器。clr觸發器將執行在託管**(在.net framework中建立並在sql server中上載的程式集的成員)中編寫的方法,而不用執行transact-sql儲存過程。
資料定義語言(ddl——data definition language)觸發器:
ddl觸發器響應資料定義語言 (ddl)語句時觸發。它們可以用於在資料庫中執行管理任務,例如,審核以及規範資料庫操作。
dml觸發器是針對insert、update和delete等資料庫操作語句進行觸發,而ddl則是針對create、alter和drop等資料庫定義語句進行觸發。
建立觸發器:
可以使用
create trigger
語句來建立觸發器。它的基本語法結構如下:
createtrigger
<
觸發器名
>
on[with encryption ]
as 語句
>[ ...n]
} }
1.<
觸發器名
>
必須符合識別符號規則,並且在資料庫中必須唯一。可以選擇是否指定觸發器所有者名稱。
2.<
表名》 | <
檢視名》
是在其上執行觸發器的表或檢視,有時稱為觸發器表或觸發器檢視。可以選擇是否指定表或檢視的所有者名稱。
3.with encryption
可以對觸發器進行加密處理。
4.after
指定觸發器只有在觸發
sql語句中指定的所有操作都已成功執行後才激發。所有的引用級聯操作和約束檢查也必須成功完成後,才能執行此觸發器。如果僅指定
for關鍵字,則
after
是預設設定。不能在檢視上定義
after
觸發器。
5.instead of
指定執行觸發器而不是執行觸發
sql語句,從而替代觸發語句的操作。
在表或檢視上,每個
insert
、update
或delete
語句最多可以定義乙個
instead of
觸發器。
6.是指定在表或檢視上執行哪些資料修改語句時將啟用觸發器的關鍵字。必須至少指定乙個選項。在觸發器定義中允許使用以任意順序組合的這些關鍵字。如果指定的選項多於乙個,需用逗號分隔這些選項。
7.as
指定觸發器要執行的操作。
8.語句
>
是觸發器的條件和操作。觸發器條件指定其他準則,以確定
delete
、insert
或update
語句是否導致執行觸發器操作。當嘗試
delete
、insert
或update
操作時,
transact-sql
語句中指定的觸發器操作將生效。
例:
在表employees
中建立乙個
insert
觸發器,如果插入記錄的
dep_id
值在表departments
中不存在,則不執行插入操作,並提示使用者,具體**如下:
use hrsystem
gocreate trigger insert_employees on employees
for insert
as--從表inserted中獲取新插入記錄的部門編號
declare @depidint
declare @depname varchar(100)
select @depid = dep_id from inserted
--判斷插入的部門編號是否存在
select @depname=dep_name from departments where dep_id=@depid
if @depname is null
begin
print '指定部門不存在,請選擇具體部門!' -- 提示錯誤資訊
rollback transaction -- 回滾操作
endgo
觸發器概述
觸發器是一種特殊的儲存過程,它在插入,刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。資料庫觸發器有以下的作用 安全性。可以基於資料庫的值使使用者具有運算元據庫的某種權利。可以基於時間限制使用者的操作,例如不允許下班後和節假日修改資料庫資料。可以基於資料庫...
sqlserver觸發器複習
create table a a1 int,a2 int create table b b1 int,b2 int insert into a values 1,0 insert into b values 1,0 create trigger tri update a2 a on a for up...
SQL server 之 觸發器
今天對觸發器研究了一下,之前的學習感覺挺朦朧的,今天鼓搗了一天,算是有了一點點了解,把學習的體會記錄了下來。常見的觸發器 觸發器的作用 自動化操作,減少了手動操作以及出錯的機率 現實工作中用的比較少,因為想讓他執行起來效率高很難 一 dml觸發器 insert delete update 不支援se...