SQL 触发器

前言:        
       触发器是一种特殊类型的存储过程,是为响应数据操作语言(DML) 事件或数据定义语言(DDL)事件而执行的存储过程。当用户对表进行相应操作时,触发器交自动执行。触发器可以基于表创建,也可以基于视力创建。因此常常用于复杂的业务规则。


创建触发器

       触发器是数据库独门是。当一个事件发生时,触发器自动地隐式运行。但是,触发器不能接收参数。SQL 支持3种类型的触发器: Install (插入)、Update (更新)、Delete(删除)。当向表插入数据、更新数据、删除数据时,触发器就被调用。

语法:
      
Create Trigger trigger_name
       On { table | view }
        [ With Encryption ]
       {
               {
                     { For | After | Instead Of } { [ Insert ] [ , ] [ Update ] [ , ] [ Delete ] }
                             [ With Append ]
                            [ Not For Replication ]
                             As
                             [
                                 { If Update ( column )
                                          [ { And | Or } Update ( column ) ]
                                                [ …n ]
                                     | If ( Columns_Updated () { Bitwise_operator } Updated_bitmask )
                                     { comparison_operator } column_bitmask […n]
                                 }
                             ]
                      sql_statement […n]
               }
       }
       
参数说明:
              trigger_name:触发器的名称。触发器名称必须符合标识符规则,并且在数据库中必须{wy}。可以选择是否指定触发器所有者名称。
              table | view:是在其上执行触发器的表或视图,有时称为触发器表或触发器视图。可以选择是否指定表或视图的所有者名称。
              With Encryption:加密 syscomments 表中包含 create trigger 语句文本的条目。使用 with encryption 可防止将触发器作为 SQL Server 复制的一部分发布。
              After:指定触发器只有在触发 SQL 语句中指定的所有操作都已成功执行后才激发。所有的引用级联操作和约束检查也必须成功完成后,才能执行此触发器。如果仅指定 For 关键字,则 After 是默认设置。不能在视图上定义 After 触发器。
              Instead Of: 指定执行触发器而不是执行月收入SQL语句,从而替代触发语句的操作。在表或视图上,每个 Install 、Update 或 Delete 语句最多可以定义一个 Instead Of 触发器。然而,可以在每个具有 Instead Of 触发器的视图上定义视图。
                                     Instead Of 触发器不能在 With Check option 的可更新视图上定义。如果向指定了With Check option 选项的可更新视图添加 Instead Of 触发器,SQL Server 将产生一个错误。用户必须用 Alter View 删除该选项后才能定义 Instead Of 触发器。
              [ Insert ] [ , ] [ Update ] [ , ] [ Delete ]:是指定在表或视图上执行哪些数据修改语句时将xx触发器的关键字。必须至少指定一个选项。在触发器定义中允许使用以任意顺序组合的这些关键字。如果指定的选项多于一个,需用逗号分隔这些选项。对于 Instead Of 触发器,不通话在具有 On Delete 级联操作引用关系的表上使用 Delete 选项。同样,也不通话在具有 On Update 级联操作引用关系表上使用 Update 选项。
              With Append:指定应该添加现有类型的其他触发器。只有当兼容级别是65或更低时,才需要使用该可选子句。如果兼容级别是70或更高,则不必使用 With Append 子句添加现有类型的其他触发器。
             Not For Replication:表示当复制进程更改触发器所涉及的表时,不应执行该触发器。
             As:是触发器要执行的操作。
             sql_statement:是触发器的条件和操作。触发器条件指定其他准则,以确定 Delete、Insert 或 Update 语句是否导致执行触发器操作。当尝试 Delete、Insert 或 Update 中的触发器创建语法有较大的差别。语法如下:
                         
create trigger trigger_name
                         
[ before | after ] trigger_event
                         
on table_reference
                         
[ for each row [ when trigger_condition ] ]
                         
trigger_body
                          参数说明:
                                 trigger_name:触发器的名称。
                                 before | after:指明了触发器是在数据更新前,还是数据更新后被xx。
                                 trigger_event:指定触发时间。可以为 Insert、Update、Delete。如果要创建 Instead of 触发器可活力前面的 Before 或 after 关键字。
                                 on子句: 指定了基于某张表创建的触发器。
                                 for each row:指明了每次插入、更新或删除一行时就调用触发器。如果没有这一个选项,则只对整个表执行一次。
                                when子句:是可选的,用于指明搜索条件,当满足某一条件时会调用触发器。
                                trigger_body:为触发器执行的,这些语句是放在 begin and 语句块中。在 Oracle 中,应用触发器要注意以下几点:
                                            * 触发器中不能使用控制语句、事务管理语句,如 commint 语句、rollback 语句、svaepoint 语句。对于创建的系统触发器允许使用 Create 语句、Alter 语句、Drop语句。
                                           * 由触发器调用的存储过程或函数同样不允许使用控制语句。
                                           * 触发器中不允许使用 longrae、long数据类型。
        实际举例(insert触发器):
              use 数据库名
             
go

              create trigger 触发器名
              on 表名
              after insert    <注:如果是创建 update 或 delete 触发器,那么在上一行加上“with encryption”,把这里的 insert 改成 update 或 delete 即可>
             
as
              print ('打印出一条信息!')
              
go

              insert into 操作表名 values(数值1,数值2)
             
              当你向“操作表”插入一条数据时,触发器就执行了,在输出窗口打印“打印一条信息”。


修改触发器

语法:
       
alter trigger trigger_name
        ………
       ……
       …

删除触发器

语法:
      
drop trigger { trigger_name } [ …n ]

未完待续,敬请xx……



郑重声明:资讯 【SQL 触发器】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——