面試必備——數據庫觸發器

觸發器是用戶定義在關係表上的一類由事件驅動的特殊過程。一旦定義,觸發器將被保存在數據庫服務器中。任何用戶對錶的增、刪、改操作均由服務器自動激活相應的觸發器,在關係數據庫管理系統核心層進行集中的完整性控制。觸發器類似於約束,但是比約束更加靈活,可以實施更爲複雜的檢查和操作,具有更精細和更強大的數據控制能力。

定義觸發器

觸發器又叫做事件-條件-動作規則。當特定的系統事件發生時,對規則的條件進行檢查,如果條件成立則執行規則中的動作,否則不執行該動作。規則中的動作體可以很複雜,可以涉及其他表和其他數據庫對象,通常是一段SQL存儲過程。
SQL使用CREATE TRIGGER命令建立觸發器。

CREATE TRIGGER <觸發器名>							/*每當觸發事件發生時,該觸發器被激活*/
{BEFORE|AFTER}<觸發事件>ON<表名>			/*指明觸發器激活的時間是在執行觸發事件前或後*/
REFERENCING NEW|OLD ROW AS <變量>	/*REFERENCING指出引用的變量*/
FOR EACH{ROW|STATEMENT}						/*定義觸發器的類型,指明動作體執行的頻率*/
[WHEN <觸發條件>]<觸發動作體>						/*僅當觸發條件爲真時才執行觸發動作體*/

觸發事件可以是INSERT、DELETE或UPDATE,也可以是這幾個事件的組合。

激活觸發器

觸發器的執行是由觸發事件激活,並由數據庫服務器自動執行的。一個數據表上可能定義了多個觸發器,同一個表上的多個觸發器激活時遵循如下的執行順序:
(1)執行該表上的BEFORE觸發器;
(2)激活觸發器的SQL語句;
(3)執行該表上的AFTER觸發器。
對於同一個表上的多個BEFORE(AFTER)觸發器,遵循“誰先創建誰先執行”的原則。有些關係數據庫管理系統是按照觸發器名字的字母排序順序執行觸發器。
編寫觸發器時,需要注意以下幾點:
觸發器不接受參數,最大爲32KB。
一個表上最多可有12個觸發器,但同一時間、同一事件、同一類型的觸發器只能有一個。
在觸發器的執行部分只能用DML語句(SELECT,INSERT,UPDATE,
DELETE),不能使用DDL語句(CREATE,ALTER,DROP)。
在觸發語句中不能包含事務控制語句(COMMIT,ROLLBACK,
SAVEPOINT)。在觸發器主體中調用的任何過程、函數,都不能使用事務控制語句。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章