中文/English

© 2018 重庆新大正电子有限公司 页面版权所有 渝ICP备18016741号 网站建设:中企动力重庆

NEWS CENTER

新闻资讯

您的位置:
首页
>
>
>
触发器及其工作原理

电话:023-85555288
QQ:1537910764
地址:重庆江津区珞璜工业园睿容A区
网址:
www.cqxdz.cn

重庆新大正电子有限公司

新闻中心

触发器及其工作原理

分类:
行业动态
作者:
来源:
2018/12/13 13:54
浏览量
【摘要】:
触发器是一种特殊类型的存储过程,不由用户直接调用。创建触发器时会对其进行定义,以便在对特定表或列作特定类型的数据修改时执行。   触发器可以查询其他表,而且可以包含复杂的SQL语句。它们主要用于强制服从复杂的业务规则或要求。例如,您可以根据客户当前的帐户状态,控制是否允许插入新订单。   触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。   作用  
  触发器是一种特殊类型的存储过程,不由用户直接调用。创建触发器时会对其进行定义,以便在对特定表或列作特定类型的数据修改时执行。
 
  触发器可以查询其他表,而且可以包含复杂的 SQL 语句。 它们主要用于强制服从复杂的业务规则或要求。 例如,您可以根据客户当前的帐户状态,控制是否允许插入新订单。
 
  触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。
 
  作用
 
  1)触发器可通过数据库中的相关表实现级联更改;通过级联引用完整性约束可以更有效地执行这些更改。
 
  2)触发器可以强制比用 CHECK 约束定义的约束更为复杂的约束。与 CHECK 约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。
 
  3)触发器还可以强制执行业务规则
 
  4)触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。
 
  实际应用
 
  尽管触发器有很多优点,但是在实际的项目开发中,特别是OOP思想的深入,触发器的弊端也逐渐突显,主要:
 
  1、过多的触发器使得数据逻辑变得复杂
 
  2、数据操作比较隐含,不易进行调整修改
 
  3、触发器的功能逐渐在代码逻辑或事务中替代实现,更符合OO思想。
 
  建议:使用触发器需慎重。
 
  触发器类型
 
  After触发器
 
  After触发器要求只有执行某一操作insert、update、delete之后触发器才被触发,且只能定义在表上。
 
  1)insert触发器
 
  2)update触发器
 
  3)delete触发器 
 
  工作原理
 
  触发器有两个特殊的表:插入表(instered表)和删除表(deleted表)。这两张是逻辑表也是虚表。有系统在内存中创建者两张表,不会存储在数据库中。而且两张表的都是只读的,只能读取数据而不能修改数据。这两张表的结果总是与被改触发器应用的表的结构相同。当触发器完成工作后,这两张表就会被删除。Inserted表的数据是插入或是修改后的数据,而deleted表的数据是更新前的或是删除的数据。
 
  1、触发器新增
 
  原理:
 
  当触发INSERT触发器时,新的数据行就会被插入到触发器表和inserted表中。inserted表是一个逻辑表,它包含了已经插入的数据行的一个副本。inserted表包含了INSERT语句中已记录的插入动作。inserted表还允许引用由初始化INSERT语句而产生的日志数据。触发器通过检查inserted表来确定是否执行触发器动作或如何执行它。inserted表中的行总是触发器表中一行或多行的副本。
 
  场景:增加学生信息时,要校验其年龄,暂定其年龄必须大于18,否则新增失败 
 
 
  2、触发器更新
 
  原理:
 
  可将UPDATE语句看成两步操作:即捕获数据前像(before image)的DELETE语句,和捕获数据后像(after image)的INSERT语句。当在定义有触发器的表上执行UPDATE语句时,原始行(前像)被移入到deleted表,更新行(后像)被移入到inserted表。
 
  触发器检查deleted表和inserted表以及被更新的表,来确定是否更新了多行以及如何执行触发器动作。
 
  可以使用IF UPDATE语句定义一个监视指定列的数据更新的触发器。这样,就可以让触发器容易的隔离出特定列的活动。当它检测到指定列已经更新时,触发器就会进一步执行适当的动作,例如发出错误信息指出该列不能更新,或者根据新的更新的列值执行一系列的动作语句。
 
  场景:
 
  专业信息ID修改,对应的学生信息中专业ID也相应进行修改
 
 
  3、触发器删除
 
  原理:
 
  当触发DELETE触发器后,从受影响的表中删除的行将被放置到一个特殊的deleted表中。deleted表是一个逻辑表,它保留已被删除数据行的一个副本。deleted表还允许引用由初始化DELETE语句产生的日志数据。