【机房重构】——触发器

机房收费系统在做的时候看到有的人用到的触发器就想的用一下,可是总是往后拖,机房就快结束了也没有用到,于是就把退卡功能加入触发器重新实现了一下。


一、触发器概念


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

触发器不能被执行,只能为表上的Insert、Update、Delete事件所触发,顾名思义:某一操作发生则一触即发此操作。


二、触发器的使用


以机房收费中退卡为例:退卡时需要在T_CancelInfo表中插入一条数据,同时更新T_CardInfo中字段Cash和Status。


1.建立触发器:insert一条数据到T_CancelInfo引发update T_CardInfo中对应卡号的一条记录,因此是在T_CancelInfo表中新建触发器


     


2.SQL Server中代码编写,D层中不需要写代码


ALTER TRIGGER [dbo].[TriggerCard] ON  [dbo].[T_CancelInfo] for insert
AS 
BEGIN	
	--声明变量
	declare @CardNo char(12)

	--从Inserted虚拟表中得到CardNo赋值给参数
	select @CardNo = CardNO  from inserted    

	begin
		--更新T_CardInfo表中数据
		update T_CardInfo set Cash =0 ,Status ='不使用'  where CardNo=@CardNo 
	end 
END


解析:

[dbo].[TriggerCard]:触发器的名称

[dbo].[T_CancelInfo]:引发的此事件发生的表

for insert:T_CancelInfo的插入事件执行后才触发

select @CardNo = CardNO  from inserted:从Insert T_CancelInfo 事件形成的逻表中获得字段CardNo给到参数@CardNo


借用一张图片说明Inserted和Deleted逻辑表:


   


三、优缺点


优点:

1.以事件方式来处理. 当数据发生变化的时候, 自动作处理。

2.开销非常低,运行触发器所占用的时间主要花在引用其他存于内存或磁盘上的表上。

3.只对每一个DML(增删改查)操作触发一次,无论它一共影响了多少行。

4.可以实现比Check约束更复杂的数据完整性,触发器可以引用其他表中的列来完成检查工作。


缺点:

当数据库之间导出导入的时候, 可能会引起不必要的触发逻辑,执行速度主要取决于数据库服务器的性能与触发器代码的复杂程度。

使用一次,设计不好可能会死机。

滥用触发器会造成数据库以及应用程序的维护困难,如果我们过分依赖触发器,一定会影响数据库的结构。


事物都有它的两面性,有利有弊,重要的是我们如何根据它的特点,让它的利发挥最大效益。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值