觸發器是一種特殊型別的儲存過程,它不同於我們前面介紹過的儲存過程。觸發器主要是通過事件進行觸發而被執行的,而儲存過程可以通過儲存過程名字而 被直接呼叫。當對某一表進行諸如update、 insert、 delete 這些操作時,sql server 就會自動執行觸發器所定義的sql 語句,從而確保對資料的處理必須符合由這些sql 語句所定義的規則。
觸發器的主要作用就是其能夠實現由主鍵和外來鍵所不能保證的複雜的參照完整 性和資料的一致性。除此之外,觸發器還有其它許多不同的功能:
(1) 強化約束(enforce restriction)
觸發器能 夠實現比check 語句更為複雜的約束。
(2) 跟蹤變化auditing changes
觸發器可以偵測資料庫內的操作,從而不 允許資料庫中未經許可的指定更新和變化。
(3) 級聯執行(cascaded operation)。
觸發器可以偵測資料庫 內的操作,並自動地級聯影響整個資料庫的各項內容。例如,某個表上的觸發器中包含有對另外乙個表的資料操作(如刪除,更新,插入)而該操作又導致該錶上觸 髮器被觸發。
(4) 儲存過程的呼叫(stored procedure invocation)。
為了響應資料庫更新觸,髮器可以 呼叫乙個或多個儲存過程,甚至可以通過外部過程的呼叫而在dbms( 資料庫管理系統)本身之外進行操作。
由此可見,觸發器可以解決高階形式的 業務規則或複雜行為限制以及實現定製記錄等一些方面的問題。例如,觸發器能夠找出某一表在資料修改前後狀態發生的差異,並根據這種差異執行一定的處理。此 外乙個表的同一型別(insert、 update、 delete)的多個觸發器能夠對同一種資料操作採取多種不同的處理。
總體而言,觸發器 效能通常比較低。當執行觸發器時,系統處理的大部分時間花費在參照其它表的這一處理上,因為這些表既不在記憶體中也不在資料庫裝置上,而刪除表和插入表總是 位於記憶體中。可見觸發器所參照的其它表的位置決定了操作要花費的時間長短。
sql server觸發器的種類
sql server 2000 支援兩種型別的觸發器:after 觸發器和instead of 觸發器。其中after 觸發器即為sql server 2000 版本以前所介紹的觸發器。該型別觸發器要求只有執行某一操作(insert update delete) 之後,觸發器才被觸發,且只能在表上定義。可以為針對表的同一操作定義多個觸發器。對於after 觸發器,可以定義哪乙個觸發器被最先觸發,哪乙個被最後觸發,通常使用系統過程sp_settriggerorder 來完成此任務。
instead of 觸發器表示並不執行其所定義的操作(insert、 update、 delete),而僅是執行觸發器本身。既可在表上定義instead of 觸發器,也可以在檢視上定義instead of 觸發器,但對同一操作只能定義乙個instead of 觸發器。
oracle 觸發器的種類
語句級觸發器,以及行級觸發器,前者可以在語句執行前或執行後被觸發。後者在每個觸發語句影響的行觸發一次。還有before
和after
觸發的命令。在
insert,update,
和delete
之前或之後執行,引 用新舊值進行處理。如果需通過觸發器設定插入行中的某列值,則為了訪問「新
(new)」
值,需使用乙個觸發器
before insert
,使用after insert
則不 行。
instead of
觸發器命令,使用它告訴
oracle
應執行什麼操作。
資料庫觸發器
最近做了個觸發器的例子 create trigger tru user on user for update asif update status begin update user set stopflag 1 from inserted where user.userid inserted.us...
資料庫 觸發器
觸發器的概念 是使用者定義在關係表上的一類有事件驅動的特殊過程。一旦定義,任何對錶的增刪改操作均有伺服器自動啟用相應的觸發器,在dbms核心層進行集中的完整性控制。類似於約束,但比約束更靈活。觸發器的分類 dml觸發器 dml data manipulation language 觸發器是當資料庫伺...
資料庫觸發器
想要某條語句在事件發生時自動執行 某錶發生改動時,自動處理 除下列三個關鍵字意外的不支援觸發器 建立觸發器時,需要給出四條資訊 create trigger newproduct after insert on products foreach rowselect product added 分析 ...