zoukankan      html  css  js  c++  java
  • 触发器及触发器的作用

    触发器是一种用来保障参照完整性的特殊的存储过程,它维护不同表中数据间关系的有关规则。当对指定的表进行某种特定操作(如: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表,它们都是临时表,其结构与触发器的基表结构相同,用来存放与修改相关的数据行。

    常见的触发器有三种:分别应用于Insert,Update,Delete事件。

    使用触发器的优点

    触发器是自动的:它们在对表的数据作了任何修改(比如手工输入或者应用程序采取的操作)之后立即被激活。

    触发器可以通过数据库中的相关表进行层叠更改。例如,可以在 titles 表的 title_id 列上写入一个删除触发器,以使其它表中的各匹配行采取删除操作。该触发器用 title_id 列作为唯一键,在 titleauthor、sales 及 roysched 表中对各匹配行进行定位。

    触发器可以强制限制,这些限制比用 CHECK 约束所定义的更复杂。与 CHECK 约束不同的是,触发器可以引用其它表中的列。例如,触发器可以回滚试图对价格低于 10 美元的书(存储在 titles 表中)应用折扣。</p< />

  • 相关阅读:
    Flutter——Text组件(文字组件)
    Dart的导包
    Dart 面向对象 类 方法
    Dart中的匿名方法与自执行方法
    Dart的List比较特殊的几个API
    SearchView监听关闭正确方案
    Android选择多图上传
    ListView嵌套ScrollView会出现的问题
    禁用ViewPager的滑动事件
    SQLite相关异常
  • 原文地址:https://www.cnblogs.com/frankielf0921/p/5923946.html
Copyright © 2011-2022 走看看