机房收费系统之触发器的使用

触发器这个词,我想大家应该都不是很陌生了吧!我们在学数据库视频时就接触到了,到现在我都不知道自己接触过这个词多少次了。之前接触了那么多次,自己也没有去用,总是在编写代码的时候用着最笨的方式进行编写。想想自己以前编写的过程都有点汗颜。

不过这次敲个人版机房收费系统,自己实际去运用了一下触发器,感觉它太给力了,节省了很多不必要的代码了,减轻了系统的负担。还节省了很多时间。真是既省时又省力。

废话不多说了,接下来在简单唠叨几句什么是触发器,触发器的好处以及注意事项和自己在机房时所用的触发器实例。

触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程

它的执行不是由程序调用,也不是手工启动,而是由事件来触发,当对一个表进行操作( insert,delete, update)时就会激活它执行。

好处:触发器可通过数据库中的相关表实现级联更改,不过,通过级联引用完整性约束可以更有效地执行这些更改。

触发器可以强制比用CHECK约束定义的约束更为复杂的约束。与 CHECK 约束不同,触发器可以引用其它表中的列。

注意事项:触发器功能强大,轻松可靠地实现许多复杂的功能,为什么又要慎用呢。触发器本身没有过错,

但由于我们的滥用会造成数据库及应用程序的维护困难。在数据库操作中,我们可以通过关系、触发器、存储过程、

应用程序等来实现数据操作…… 同时规则、约束、缺省值也是保证数据完整性的重要保障。如果我们对触发器过分的依赖,

势必影响数据库的结构,同时增加了维护的复杂程度

更详细的解释大家可以到http://baike.baidu.com/subview/71792/6320022.htm

在简单说一下CHECK 约束:指定可由表中一列或多列接受的数据值或格式。

例如,可以要求 student 表的 stuID 列只允许输入11位数的数字。

实例:学生下机

学生下机后的余额=学生上机前的金额—消费的金额

如果不使用触发器的话,我们在更新消费表的同时,还要编写更新卡表中金额代码。这样编写起来做的都是无用功。又费时又费力。

如果用触发器就不一样了,几行代码就把卡表中的数据跟新了。

ALTER TRIGGER [dbo].[_upCardCash] --触发器名称
on [dbo].[T_Consumeinfo] --作用的表
for Update --触发的事件

AS 
BEGIN
	declare @ID as bigint --卡号
	declare @CardCash decimal(18,1) --金额
	--查找消费表中的余额与卡号。其中Deleted是临时表,里面的数据是没更新之前旧的数据,
	--而Inserted也是一个临时表,它里面的数据是更新之后新的数据
	--当旧数据与新数据中CardCash不相同时,更新表T_Cardinfo
	select @CardCash=i.CardCash,@ID=i.StuID  from T_Consumeinfo c,deleted d, inserted i where d.CardCash != i.CardCash
		--更新卡表
	UPDATE T_Cardinfo   SET CardCash=@CardCash WHERE StuID=@ID 
END

在触发器的中,如果查询表中的数据没有条件限制,触发器默认是数据表中的最后一行。(数据库默认排序方式是主键从小到大)

例如:学生充值

ALTER TRIGGER [dbo].[stu_Recharge]
   ON  [dbo].[T_Rechargeinfo]
   for insert
AS 
BEGIN
	declare @Balance decimal(18,1)  --余额
	declare @ID as bigint
	declare @CardCash decimal(18,1)  --充值金额
	select @CardCash =Cardcash,@ID=StuID From T_Rechargeinfo  --查找充值表中的最后一行的数据的充值金额与卡号
	select @Balance=CardCash from T_Cardinfo where StuID=@ID --查询卡表中的金额
	set @balance=@Balance+@CardCash --总金额
	SET NOCOUNT ON;--返回的行数,no为不返回。
	UPDATE T_Cardinfo set CardCash =@Balance Where StuID =@ID --更新
END
以上是我对触发器的理解。哪里有不对的地方请大家指出来,在下面留言即可。谢谢。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值