【重构】触发器的使用

        在机房重构的过程中,进一步学习了解数据库的运用。以前使用数据库只是单纯的建表,对表进行增删改查。重构中主要运用到的是触发器,视图还有存储过程的使用。下面先介绍一下关于触发器的使用。

        【知识点】

        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>

         【小结】

      感觉触发器的使用可以少写很多代码,以事件方式来处理,当数据发生变化的时候,,自动作处理。但是也有相应的缺点,要适当使用。触发器建好后要执行一下,一开始很很傻的以为建好就行了,没有执行,所以就一直没有成功。小的细节也要注意,才能更好的节约时间提高效率。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值