觸發器是一種特殊的存儲過程,能夠完成主鍵和外鍵不能保證的複雜的數據完整性和一致性。
主要用途:
- 對數據庫間的完整性做強制約束。
- 對數據庫中的表進行級聯操作,可以自動觸發操作類型。
- 跟蹤變化,對違法的操作進行回滾或撤銷,保證數據庫的安全。
- 可以設定錯誤返回信息,增加程序的可維護性。
- 觸發器可以調用更多的存儲過程。
主要優點:
- 觸發器是自動執行的,一旦設立就存在一種觸發機制,永遠監控着數據庫的事件狀態。
- 觸發器可以對數據庫中的表進行層疊更改。
- 觸發器可以設置比check更爲複雜的約束限制。觸發器還可以對不同表中的列進行引用。
1,數據操作觸發器(DML)
ceate trigger triggername
on table
{after/before/instead of } {insert,update,delete}
as
begin
//PL/SQl 過程塊
end
after:用於指定觸發器在SQL語句中指定數據操作完成後才能被觸發有關級聯操作和約束性檢查成功後才能執行操作。after只能創建在表上,不能創建在觸發器。使用after觸發器首先會建立inserted,deleted,表然後執行SQL語句中的數據操作,最後纔會執行觸發器中的代碼。
instead of 是一種動作執行前的觸發類型,用觸發器代替觸發語句進行操作。在表或視圖中只能定義一個instead of 觸發器,可以定義多個after觸發器。使用instead of觸發器則是在建立inserted,deleted表後直接對觸發器進行執行。
before:一種動作執行前的觸發類型
2:數據定義語言觸發器(DDL)
數據定義語言觸發器主要是爲了響應各種數據定義語言事件而響應,主要與create,,alter,drop開頭的T-SQL語句相對應。
例如拒絕用戶對數據庫中的表進行刪除和更改操作。
如果想讓整個服務器都收到DDL觸發器的約束,可以創建作用於服務器中的觸發器
觸發器的常用應用
1,創建登錄觸發器
當用log_test登錄時,登錄失敗。
2,限制非工作時間操作數據
創建觸發器允許log_test只能在8:00-17:00登錄
重命名觸發器
exec sp_rename Oldname,Newname