觸發器是一種用來保障參照完整性的特殊的儲存過程,它維護不同表中資料間關係的有關規則。當對指定的表進行某種特定操作(如:insert,delete或update)時,觸發器產生作用。觸發器可以呼叫儲存過程。
建立觸發器的語法:
create trigger[owner.]觸發器名on [owner.]表名
for
asbegin
sql語句(塊)
end
定義乙個好的觸發器對簡化資料的管理,保證資料庫的安全都有重要的影響。觸發器是針對表一級的,這就意味著,只有表的所有者有權建立表的觸發器。
舉例:
/* 插入乙個新行,必須保證外來鍵與主鍵相匹配,觸發器應該首先檢查被插入行與主鍵表的連線。*/#以下的觸發器對inserted表和titles表的title_id進行比較,這裡假設正在給外來鍵輸入資料,沒有插入空值,若連線失敗,事務被回退。insert,update,delete
create trigger forinsertrigl
on salesdetail
for insert
asif(select count(*)
from title,inserted
where titles.title_id=inserted.title_id)!=@@rowcount
begin
rollback transaction
print 「no,some title_id does not exist in titles.」
endelse
print 「added! all the title_id is exist in titles.」
/* 在本例中,@@rowcount代表新增到salesdetail表的行數,這也是新增到inserted表中的行數。通過連線表titles和表inserted來檢測所有新增到salesdetail的title_id是否在titles中存在。若所連線的行數(count(*))與@@rowcount不同,由有乙個或多個插入不正確,整個事務被取消。*/
觸發器的限制:
●乙個表最多只能有三個觸發器,insert,update,delete
●每個觸發器只能用於乙個表
●不能對檢視、臨時表建立觸發器
●truncate table能刪除表,但不能觸發觸發器
●不能將觸發器用於系統表
合理地使用觸發器對效能的影響是正面的。在設計和使用觸發器時,經常地用sp_depends命令了解物件所關聯的觸發器是有好處的,該命令能列出觸發器影響的所有物件、表和視等。
在定義幾類資料庫物件的時候,對儲存過程、索引和觸發器要給予特別的注意,尤其儲存過程,它設計的好壞對資料庫效能的影響很大。
常見的觸發器有三種:分別應用於insert,update,delete事件。
使用觸發器的優點
觸發器是自動的:它們在對錶的資料作了任何修改(比如手工輸入或者應用程式採取的操作)之後立即被啟用。
觸發器可以通過資料庫中的相關表進行層疊更改。例如,可以在 titles 表的 title_id 列上寫入乙個刪除觸發器,以使其它表中的各匹配行採取刪除操作。該觸發器用 title_id 列作為唯一鍵,在 titleauthor、sales 及 roysched 表中對各匹配行進行定位。
觸發器可以強制限制,這些限制比用 check 約束所定義的更複雜。與 check 約束不同的是,觸發器可以引用其它表中的列。例如,觸發器可以回滾試圖對**低於 10 美元的書(儲存在 titles 表中)應用折扣。
觸發器 mysql觸發器
觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...
觸發器(五 復合觸發器)
oracle11g開始提供了一種復合觸發器,簡單的說就是支援把語句級和行級觸發器組合在一起。實際應用場景不多,這裡就做個記錄。與單個觸發器語法有所區別 1.單個觸發器的頭部是 before after 動作 on 物件 for 觸發級別 而組合觸發器的頭部是 for 動作 on 物件 compoun...
mysql觸發器when MySQL觸發器
set quoted identifier on goset ansi nulls on goalter trigger trg risks on dbo.projectrisk for insert,update asbegin update projectrisk set classificat...