什麼是觸發器

來源:互聯網
上載者:User

觸發器是一種用來保障參照完整性的特殊的預存程序,它維護不同表中資料間關係的有關規則。當對指定的表進行某種特定操作(如: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表,它們都是暫存資料表,其結構與觸發器的基表結構相同,用來存放與修改相關的資料行。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.