读书人

触发器在系统中运用

发布时间: 2013-03-27 11:22:42 作者: rapoo

触发器在系统中应用


机房收费系统,在退卡操作时,要删除学生信息表中的数据还要将退还金额信息写到退卡记录表中,两条SQL语句就能实现了,但是还没有更简单的方法呢,想到了再数据库视频中学到的触发器,一个操作引起其他操作。

重新学习了触发器这部分内容。

概括一下触发器,顾名思义就是在对数据库操作时引起的另外的操作,这里操作只包括(update delete inserte),用触发器解决的问题是向一个表中写入(删除)数据时,同时将写入的信息保存在另一个表中,也可以是在写入(删除)数据时,另外一个表中的数据跟着变化。这些都可以用触发器实现。


下面说说自己实现用触发器实现退卡操作的。

按照触发器的特点,只需要在删除的学生基本信息表下建立一个触发器,编写好写入到退卡记录中的语句,在学生表中,执行删除时,就会自动将要删除的记录写入退卡记录中,这样实现了的确是简单哈。

问题来啦。学生基本信息表结构和退卡记录表的结构不一样啊,写入的时候,一方面将要删除的信息的卡号,余额,操作者字段内容写入,还要获得系统当时的时间,日期字段写入。这下麻烦啦。

继续找资料吧,网上的好多信息说“触发器操作的表结构一致”,不一致的话,就不能用了么,就在我快要放弃触发器的时候,实现了不同表结构的操作。过程是复杂的,结果是简单的。代码仅供参考:

ALTER TRIGGER [dbo].[delStudent]    ON  [dbo].[T_Student]   for DELETEAS BEGINinsert into T_CardDelete(cardNo,delData,delTime ,cardCash ,cardManager )values((select cardno from deleted),convert(varchar(15),GETDATE(),103),convert(varchar(15),GETDATE(),108),(select cardCash from deleted),(select stManager from deleted))end

代码解释:

(cardNo,delData,delTime ,cardCash ,cardManager )是要插入表中的字段名称

values后面的是插入的内容

(select cardno from deleted) 是在删除表中得到的卡号字段,对应记录表中的卡号字段

convert(varchar(15),GETDATE(),103) 获取系统日期字段,填进去的其他字段,当然如果是固定的字符串,直接写出来,就行啦

触发器还可以起到限制作用,如删除数据库时提示,保护原始数据等。这些功能在以后做系统时再用,先了解着。

触发器很好用,但是不能滥用。在数据特别多的时候,不适合用触发器。


说明:for=after 是在执行后才触发的

instead of代替sql语句,执行的是触发器而不是之前的sql语句




3楼lfmilaoshi3小时前
活学活用
2楼lidaasky昨天 20:28
多学习,同时要慎用触发器,否则会增加维护难度
Re: lishuangzhe7047昨天 20:49
回复lidaaskyn恩恩。
1楼lishuangzhe7047昨天 19:26
下面学习存储过程。

读书人网 >软件架构设计

热点推荐