SQL server觸發器


觸發器的概念:
       觸發器是一種特殊的存儲過程,它被分配給某個特定的表。當對這個表進行插入、更新或刪除操作時, 自動調用觸發器執行觸發器里規定的操作.
       觸發器是確保數據完整性和一致性的基本有效的方法。
       和表相關聯,可以看作是表的一部分;
       不能直接引用,通過insert/update/delete自動激活;
       屬於事務機制;
          同一類型的觸發器在表上可以有多個
觸發器的特點:
       不接受用戶參數,也不返回用戶參數;
        事件驅動,自動調用;存儲在表上。
        對數據庫中的相關表進行級聯更新和刪除
        強制比Check約束更復雜的數據完整性。
        可以引用其他表中的列。

觸發器的種類:
      插入型觸發器
      刪除型觸發器
      更新型觸發器

      一個表上可以定義多種類型的觸發器

觸發器的工作原理:
        SQL Server創建了兩個專用表:inserted表和deleted表。這是兩個邏輯表,由系統來維護,不允許用戶直接對這兩個表進行修改。它們存放於內存中,不存放            在數據庫中。這兩個表的結構總是與被該觸發器作用的表的結構相同。

         Inserted :存放由於INSERT或UPDATE語句的執行而導致要加到該觸發表中去的所有新行。即用於插入或更新表的新行值,在插入或更新表的同時,也將                   其副本存入insterted表中。因此,在insterted表中的行總是與觸發表中的新行相同 。

         deleted :deleted存放由於DELETE或UPDATE語句的執行而導致要從該觸發表中刪除的所有行。也就是說,把觸發表中要刪除或要更新的舊行移到                     deleted表中。因此,deleted表和觸發表不會有相同的行。

觸發器的工作方式:

        修改。它們存放在內存中,不存放在數據庫中。
        當向表中插入數據時,insert觸發器觸發執行,新的記錄插入到觸發器表和inserted表中。
        當觸發一個delete觸發器時,被刪除的表記錄存放到deleted表中。
        修改一條記錄等於插入一條新記錄,同時刪除舊記錄,表中原始記錄放在deleted中,修改過的記錄插入到inserted表中。

創建觸發器:

      語法:
         create trigger 觸發器名
         on 表名
           for delete /insert /update
           as
         觸發器要執行的操作

創建插入型觸發器:

        --在users表中定義觸發器,當插入紀錄時彈出消息:你已經向users表里插入了一條紀錄!
        create trigger t_users
        on users
        for insert
        as
        print '已向users表里插入了一條記錄'
        Go

創建Delete觸發器:

        --在users表中定義觸發器,當刪除紀錄時彈出消息:你已經向users表里刪除了一條紀錄!
        create trigger t_users
        on users
        for delete
        as
        print '你已經刪除了此數據'
        go

創建Updata觸發器:

        如果在xs表中更新數據,則在執行時顯示提示信息。
        create trigger tr_update
        on users
        for update
        as
        print ‘你已經更新了此數據!’
        go

修改、刪除觸發器:

        修改語法:
            alter trigger 觸發器名
            on 表名
            for delete /insert /update
            as
            觸發器要執行的操作
        刪除語法:
            drop trigger 觸發器名

禁用、啟用觸發器:

        禁用語法:
            Alter table 表名
            disable trigger 觸發器名
        啟用語法:
            Alter table 表名
            enable trigger 觸發器名

使用觸發器時應考慮的因素:

            首先檢查約束。如果在觸發器表上存在約束,則約束在 觸發器執行前檢查。如果違反約束,觸發器就不執行。

            對任何動作都可以有多個觸發器。允許在一個表上嵌套幾個觸發器。一個表可以定義多個觸發器。每個觸發器可以為一個或幾個動作定義


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM