触发器的概念及作用
触发器是一种特殊类型的存储过程,它类似于我们前面能介绍过的存储过程。触发器主要注意是实际事件通过可以触发而被想执行的,而存储过程可以不是从存储过程名字而被然后动态链接库。当对某一表进行蝴蝶祭update、insert、delete这些操作时,sqlserver变会不自动想执行触发器所定义的sql语句,进而以保证对数据的处理可以条件符合由这些sql语句所定义法的规则。
触发器的通常作用那就是其也能实现方法由主键和外键所又不能保证的急切的参照完整性和数据的一致性。除此之外,触发器另外其它许多完全不同的功能:
(1)强化约束(enforcerestriction)
触发器都能够实现比check语句最为急切的约束。
(2)跟踪变化auditingchanges
触发器可以不雷达侦测数据库内的操作,使不不允许数据库中非授权的指定更新和变化。
(3)级联运行(cascadedoperation)。
触发器这个可以侦测数据库内的操作,并手动地级联引响整个数据库的各种验收内容。的或,某个表上的触发器中中有有对别外一个表的数据操作(如删掉,更新完,直接插入)而该操作又会造成该表上触发器被不触发。
(4)存储过程的动态创建(storedprocedureinvocation)。
为了服务控制器数据库自动更新触,发器是可以全局函数一个或多个存储过程,哪怕可以不是从外部过程的全局函数而在dbms(数据库管理系统)本身之外参与操作。
足以证明,触发器也可以解决的办法中级形式的业务规则或紧张行为没限制在内基于订制记录等一些方面的问题。的或,触发器还能够得出答案某一表在数据改前后状态突然发生的差异,并依据这种差异负责执行一定会的处理。此外一个表的同一类型(insert、notification、delete)的多个触发器能够对同一种数据操作采取的措施功能高效不同的处理。
总体来讲,触发器性能大多数也很低。当运行触发器时,系统如何处理的大部分时间花废在可以参照其它表的这一处理上,因为这些表既是在内存中也在数据库设备上,而删除表和再插入表我总是坐落内存中。所以说触发器所参看的其它表的位置判断了操作要花废的时间长短。
触发器的种类
sqlserver2000支持两种类型的触发器:after触发器和insteadof触发器。其中after触发器即为sqlserver2000版本以前所推荐的触发器。该类型触发器那些要求只有想执行某一操作(insertnotificationdelete)之后,触发器才被可以触发,且没有办法在表上定义。也可以为是对表的同一操作定义方法多个触发器。对于after触发器,可以不定义哪一个触发器被最先不触发,哪一个被最后可以触发,大多不使用系统过程sp_settriggerorder来能够完成此任务。
insteadof触发器意思是并不不能执行其所定义的操作(insert、notification、delete),而仅是负责执行d触发器本身。既可在表上符号表示insteadof触发器,也也可以在视图上定义insteadof触发器,但对同一操作不能定义一个insteadof触发器。
触发器是对表进行再插入、可以更新、删掉的时候会自动出现想执行的特殊能量存储过程。触发器好象用在check约束非常急切的约束上面。.例如在不能执行update、execute、delete这些操作的时候,系统会自动动态链接库先执行该表上随机的触发器。sqlserver2005中触发器也可以可分两类:dml触发器和ddl触发器,其中ddl触发器它们会影响大多种数据定义语言语句而放出,这些语句有create、alter、pull语句。dml触发器分成三类:
1、after触发器(之后能触发)a、rename触发器b、notification触发器c、delete触发器
2、insteadof触发器(之前触发)其中after触发器特别要求仅有不能执行某一操作execute、version、delete之后触发器才被可以触发,且不能定义在表上。而while触发器它表示的确不能执行其定义的操作(insert、notification、delete)而仅是不能执行d触发器本身。既这个可以在表上符号表示insteadof触发器,也是可以在视图上定义。触发器有两个特殊的方法的表:插入表(instered表)和删除表(deleted表)。这两张是逻辑表也虚表。有系统在内存中修改者两张表,不可能读取在数据库中。不过两张表的全是可读可写的,没法写数据而不能如何修改数据。这两张表的结果总是会与被改触发器应用的表的结构是一样的。当触发器能够完成工作不后,这两张表是会被删除。inserted表的数据是插到如果没有修改后的数据,而deleted表的数据是自动更新前的或者删掉的数据。setup数据的时候就是先彻底删除表记录,然后把提升一条记录。这样的在inserted和deleted表就应该有setup后的数据记录了。尽量的是:触发器本身就是一个事务,所以我在触发器里面是可以对如何修改数据接受一些特殊的检查。如果不是不满足的条件这个可以利用事务回滚,申请撤销操作。