在机房重构的过程中,进一步学习了解数据库的运用。以前使用数据库只是单纯的建表,对表进行增删改查。重构中主要运用到的是触发器,视图还有存储过程的使用。下面先介绍一下关于触发器的使用。
【知识点】
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>
【小结】
感觉触发器的使用可以少写很多代码,以事件方式来处理,当数据发生变化的时候,,自动作处理。但是也有相应的缺点,要适当使用。触发器建好后要执行一下,一开始很很傻的以为建好就行了,没有执行,所以就一直没有成功。小的细节也要注意,才能更好的节约时间提高效率。