1. 程式人生 > >SqlServer學習之觸發器

SqlServer學習之觸發器

常用 style str 內容 數據庫結構 內存 就會 pan 默認值

什麽是觸發器?

  根據百度百科的解釋,觸發器是SqlServer提供給程序員和數據分析員來保證數據完整性的一種方法,它是與表事件相關的特殊的存儲過程,他的執行不是有程序調用,也不是手工啟動,而是由事件來出發,比如當對一個表進行增刪改時就會激活它執行。觸發器經常用於加強數據的文整形越是和業務規則等,觸發器可以從DBA_TRIGGERS,USER_TRIGGERS 數據字典中查找到,Sql3的觸發器是一個能由系統自動執行對數據庫修改的語句。

觸發器與存儲過程唯一的區別就是,觸發器無法通過EXECUTE語句執行,而是在用戶執行Transact_sql語句時自動觸發。

觸發器的分類:

  • DML(數據操縱語言 Data Manipulation Language)觸發器

    當數據庫中表的數據發生變化時(Update、Insert、Delete)觸發;主要用來強制執行業務規則,拓展約束,默認值等,因為約束只能約束同一張表的內容,而觸發器則可以執行任意sql命令;

  • DDL(數據定義語言 Data Definition Language)觸發器

    在數據庫結構發生變化時觸發,主要用來記錄數據庫的修改過程,以及限制程序員對數據庫的修改,比如不允許刪除某些指定表等。

  • 登陸觸發器

    主要響應登陸事件,如果登錄失敗則不觸發登陸觸發器。

觸發器的優點?

  1、觸發器可以通過數據庫中的相關表實現級聯更改;通過級聯引用完整性約束可以有效地執行這些更改;

  2、可以實現比check越是定義的約束更為復雜的約束;

  3、觸發器可以引用其他表中的列;

  4、觸發器可以評估數據修改前後的表狀態,並根據其差異采取對策。  

觸發器的缺點?

  1、在進行數據庫導入導出的時候,可能會引起不必要的觸發器邏輯。

觸發器的寫法

  

create trigger trigger_name
on {table_name view_name}
{for After Instead of }
[ insert, update,delete ]
as
sql_statement

SQL Server為每個觸發器都創建了兩個專用表:Inserted表和Deleted表。這兩個表由系統來維護﹐它們存在於內存中而不是在數據庫中。這兩個表的結構總是與被該觸發器作用的表的結構相同。觸發器執行 完成後﹐與該觸發器相關的這兩個表也被刪除。

Deleted表存放由於執行Delete或Update語句而要從表中刪除的所有行。
Inserted表存放由於執行Insert或Update語句而要向表中插入的所有行。

SqlServer學習之觸發器