您的当前位置:首页正文

数据库中触发器的应用探索

来源:画鸵萌宠网
2014年第4期 (总第136期) 信息通信 INF0RMAT10N&C0MMUNICAT10NS 2O14 (Sum.No 136) 数据库中触发器的应用探索 李岩 ,张志勇 (I.一汽通用轻型商用汽车有限公司综合管理部,吉林长春I30033; 2.陕西省榆林市靖边县长庆油田分公司第一采气厂作业三区,陕西榆林719000) 摘要:触发器作为数据库一种特殊的存储过程,对于数据库的完整性检查、有效性检测以及实现级联操作有着十分重要 的作用。文章研究了触发器的特点,并通过实际案例介绍了触发器作为SQL程序开发的重要应用。 关键词:触发器;数据库;应用 中图分类号:TP392 文献标识码:A 文章编号:1673—1131(2014)04-0100—01 1触发器的特点 (1)触发器是自动执行的,可以在一定条件下触发。 (2)触发器可以同步数据库的相关表,进行级联更改。 (3)触发器可以实现更复杂的安全检查。它可以实现LLCHEf K更复杂的业务规则,还可以引用其他表中的列。 (4)触发器可以实现数据库的管理任务。如DDL触发器, 在DDL语句执行后触发,可以实现一些统一的数据库管理策 略。 2触发器的种类 (1)DML触发器。DML触发器是在执行数据操作语言事 件时被调用的触发器,其中数据操作语言事件包括:INSERT、 UPDATE和DELETE语句。触发器中可以包含复杂的Transact— SQL语句,触发器整体被看作一个事务,可以回滚。 (2)DDL触发器。与DML触发器类似,与DML不同 的是,它相应的触发事件是由数据定义语言引起的事件,包 括:CREATE、ALTER和DROP语句,DDL触发器用于执行 数据库管理任务,如调节和审计数据库运转。DDL触发器 只能在触发事件发生后才会调用执行,即它只能是AFTER 类型的。 3触发器的两个临时表——inserted表和deleted表 触发器中两个比较特殊的对象:inserted表和deleted表。 在使用触发器过程中,SQLServer使用到了两张特殊的临时表, 分别是inserted表和deleted表。这两张表都存在于高速缓存 中(当然,如果内存不够用,也可能存储在硬盘上),实际上是事 务日志的视图,它们与创建了触发器的表有着相同的结构。 4触发器应用举例 触发器在维护数据表之间的一致性、保持数据的相关完 整性方面具有强大的功能。但当前很多程序员对于用SQL语 言开发触发器掌握并不充分,往往把大量操作交由前台程序 设计语言来完成。这样,在程序运行时,需要与数据库之间进 行数据的往返交付,浪费大量系统资源。而合理恰当的触发 器应用程序开发,可以使基于表对象的大量反射性操作,在数 据库后台直接完成,效率极佳,且代码简单。 以下是某停车场会员卡使用过程中的触发器设计,每一 次card表的update操作都会引起触发器的一系列操作,从而 实现相应功能。 CREATE TRIGGER uCardPMSCar ON[dbo].[card] FOR Update AS SET NoC0UNT ON 一停车场部分(声明变量部分略) 100 SELECT@cardNumber=RTRIM(cardid),一卡号 @carlD=RTRIM(cardemp_no),一编号 _@mastemame=RTRIM(cardemp_name),~车主姓名 @cardstatus=’2’ FROM inserted —l0码转8码 declare@cardNumber2 varchar(1oo) declare@re varchar(100) declare@num int set@re ” set@num=@cardNumber while@num>O select@re=substring(’0 1 23456789ABCDEF’,@num% 16+1,1)+@re,@num=@num/16 declare@h varchar(8) declare@r bigint set@r==0 set@h=subs ̄ing(@re,3,2) declrae@i bigint set@i=1 while@i<=1en(@h) begin set@r==@r+ convert(int,(case when subs ̄ing(@h,@i,1)<= 9 then substring(@h,@i,1) when substring(@h,@i,1)<=’A’then’1 0’ when substring(@h,@i,1)<=’B’then 1 1’ when substring(@h,@i,1)<=’C then’1 2 when substring(@h,@i,1)< D then’1 3’ when subs ̄ing(@h,@i,1)<=一E then’1 4’ when subs ̄ing(@h,@i,1)<= F then’1 5’ end)) power(1 6,len(@h)-@i) set@i:@i+1 end select@cardNumber=@r set@r==0 set@h=substring(@re,5,4) set@i=1 一转换部分略 SET N0COUNT OFF Go 

因篇幅问题不能全部显示,请点此查看更多更全内容

Top