程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase綜合文章 >> 什麼是觸發器

什麼是觸發器

編輯:SyBase綜合文章
觸發器是一種用來保障參照完整性的特殊的存儲過程,它維護不同表中數據間關系的有關規則。當對指定的表進行某種特定操作(如:Insert,Delete或Update)時,觸發器產生作用。觸發器可以調用存儲過程。
創建觸發器的語法:
Create Trigger[owner.]觸發器名
On [owner.]表名
For {insert,update,delete}
As
Begin
SQL語句(塊)
End
定義一個好的觸發器對簡化數據的管理,保證數據庫的安全都有重要的影響。觸發器是針對表一級的,這就意味著,只有表的所有者有權創建表的觸發器。
舉例:
插入一個新行,必須保證外鍵與主鍵相匹配,觸發器應該首先檢查被插入行與主鍵表的連接。
以下的觸發器對inserted表和titles表的title_id進行比較,這裡假設正在給外鍵輸入數據,沒有插入空值,若連接失敗,事務被回退。insert,update,delete
Create trigger forinsertrigl
On salesdetail
For insert
As
If(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.”
End
Else
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命令了解對象所關聯的觸發器是有好處的,該命令能列出觸發器影響的所有對象、表和視等。
在定義幾類數據庫對象的時候,對存儲過程、索引和觸發器要給予特別的注意,尤其存儲過程,它設計的好壞對數據庫性能的影響很大。
說明:Sybase觸發器使用的兩個測試表:Deleted表和Inserted表,它們都是臨時表,其結構與觸發器的基表結構相同,用來存放與修改相關的數據行。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved