在机房重构的过程中,进一步学习了解数据库的运用。以前使用数据库只是单纯的建表,对表进行增删改查。重构中主要运用到的是触发器,视图还有存储过程的使用。下面先介绍一下关于触发器的使用。
【知识点】
1、是什么:
触发器是一种特殊类型的存储过程,SQL Server 包括三种常规类型的触发器:DML 触发器、DDL 触发器和登录触发器,下面主要说明一下DML触发器。当数据表中的数据发生变化时,包括UPDATE、INSERT 或 DELETE任意操作,如果我们对该表写了对应的DML触发器,触发器会也会生效相应操作:UPDATE、INSERT 或 DELETE。DML触发器的主要作用在于强制执行业 务规则,以及扩展Sql Server约束,默认值等。因为我们知道约束只能约束同一个表中的数据,而触发器中则可以执行任意Sql命令。
2、为什么:
为什么要使用触发器,最简单的原因因为以前没有用过,所以要学着使用(废话)。主要还是因为在重构中,执行某一操作后该表下的数据发生变化,同时其他表中的数据也要相应的变化。比如说:在注册功能的实现中,注册成功时,卡表中要增加相应的信息,卡表中初始充值金额也要相应的更新到充值表中,这是就可以使用触发器。
3、怎么用:
触发器的使用还是比较简单的,在每张表的下面都有触发器这一项,右击新建触发器:
新建触发器如下:
<span style="font-size:18px;"><span style="font-size:18px;">SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- ============================================= CREATE TRIGGER <触发器名称> --触发器必须有名称,最多64个字符 ON <表名>--触发器所属表,当该表发生INSERT,DELETE,UPDATE操作时激活触发器 AFTER <INSERT,DELETE,UPDATE>--表执行相应操作后 AS --定义相关变量,并赋值 BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; --要变化的表执行相关操作INSERT,DELETE,UPDATE END GO</span></span>
在卡表下建立的触发器如下:
<span style="font-size:18px;">SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <RU> -- Create date: <2015.3> -- Description: <注册成功的同事,将相关信息更新到充值表中> -- ============================================= CREATE TRIGGER UpdateRecharge --写入触发器的名称 ON dbo.T_CardInfo --触发器作用的表 AFTER INSERT --执行插入操作 AS --定义变量 declare @CardNo nchar(10), @StudentNo nchar(10), @RDate date, @RTime time(0), @Balance numeric(6, 2), @Style nchar(10), @UserID nchar(10), @State nchar(10) --通过查询给变量赋值 select @CardNo=CardNO from inserted select @StudentNo=StudentNo from inserted select @RDate=RDate from inserted select @RTime =RTime from inserted select @Balance=Balance from inserted select @Style=Style from inserted select @UserID=UserID from inserted select @State=State from inserted BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; --向充值表中插入数据 -- Insert statements for trigger here insert into T_RechargeInfo(CardNo,UserID,RechargeCash,Rdate,RTime)values(@CardNo,@UserID,@Balance,@RDate ,@RTime ) END GO</span>
【小结】
感觉触发器的使用可以少写很多代码,以事件方式来处理,当数据发生变化的时候,,自动作处理。但是也有相应的缺点,要适当使用。触发器建好后要执行一下,一开始很很傻的以为建好就行了,没有执行,所以就一直没有成功。小的细节也要注意,才能更好的节约时间提高效率。