13.3 觸發(fā)器
13.3.1 觸發(fā)器基本概念
1、 觸發(fā)器是一種特殊的存儲(chǔ)過程,其特殊性在于它不需要由用戶來調(diào)用,而是當(dāng)用戶對表中的數(shù)據(jù)進(jìn)行UPDATE、INSERT或DELETE操作時(shí)自動(dòng)觸發(fā)執(zhí)行;
2、 觸發(fā)器常用于下列場合:
(1) 完成比CHECK的約束更復(fù)雜的數(shù)據(jù)約束;
(2) 為保證數(shù)據(jù)庫性能而維護(hù)的非規(guī)范化數(shù)據(jù);
(3) 實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)規(guī)則,可使業(yè)務(wù)的處理任務(wù)自動(dòng)進(jìn)行。
13.3.2 創(chuàng)建觸發(fā)器
1、 創(chuàng)建觸發(fā)器的語句:CREATE TRIGGER,語法為:
CREATE TRIGGER 觸發(fā)器名稱
ON {表名| 視圖名}
[WITH ENCRYPTION]
{FOR |AFTER|INSTEAD OF}{[INSERT][,][DELETE][,][UPDATE]}
AS
[{IF UPDATE(column)…}]
SQL語句
(1) 觸發(fā)器名稱在數(shù)據(jù)庫中必須是惟一的;
(2) ON子句用于指定在其上執(zhí)行觸發(fā)器的表;
(3) AFTER:指定觸發(fā)器只有在引發(fā)的SQL語句中指定的操作都已成功執(zhí)行,并且所有的約束檢查也成功完成后,才執(zhí)行此觸發(fā)器,這種觸發(fā)器稱為后觸發(fā)型觸發(fā)器;
(4) FOR:作用同AFTER;
(5) INSTEAD OF:指定執(zhí)行觸發(fā)器而不是執(zhí)行引發(fā)觸發(fā)器執(zhí)行的SQL語句,從而替代觸發(fā)語句的操作,這種觸發(fā)器稱為前觸發(fā)型觸發(fā)器;
(6) INSTERT、DELETE或UPDATE是引發(fā)觸發(fā)器執(zhí)行的操作,若同時(shí)指定多個(gè)操作,則各操作之間用逗號分隔;
2、 創(chuàng)建觸發(fā)器時(shí),需要注意:
(1) 在一個(gè)表上可以建立多個(gè)名稱不同、類型各異的觸發(fā)器,每個(gè)觸發(fā)器可由三個(gè)操作引發(fā);
(2) 大部分Transact-SQL語句都可用在觸發(fā)器中,但也有一些限制;
(3) 在觸發(fā)器定義中,可以使用IF UPDATE子句測試在INSERT和UPDATE語句中是否對指定字段有影響;
(4) 通常不要在觸發(fā)器中返回任何結(jié)果。
3、 創(chuàng)建后觸發(fā)型觸發(fā)器
使用FOR或AFTER選項(xiàng)定義的觸發(fā)器為后觸發(fā)的觸發(fā)器,即只有在引發(fā)觸發(fā)器執(zhí)行語句中指定的操作都已完成執(zhí)行,并且所有的約束檢查也成功完成后,才執(zhí)行的觸發(fā)器;
4、 創(chuàng)建前觸發(fā)型觸發(fā)器
使用INSTEAD OF 選項(xiàng)定義的觸發(fā)器為前觸發(fā)型觸發(fā)器,在該觸發(fā)器中,指定執(zhí)行觸發(fā)器而不是執(zhí)行引發(fā)觸發(fā)器執(zhí)行的SQL語句,從而替代引發(fā)語句的操作。
相關(guān)推薦:2010年9月計(jì)算機(jī)等級考試精華備考資料匯總北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |