• 机房重构(4)——触发器的使用


          上篇文章《机房重构(3)——存储过程》介绍了存储过程的使用,接下来介绍一下触发器的使用。说到触发器,我们并不陌生,我们学习过程中涉及到非常多相关的知识,可是欠缺的实践应用。通过这次机房收费,对触发器有了进一步的理解。

          1、简单介绍

          触发器也是一种与表事件相关的特殊的存储过程。由事件来触发,当对一个表进行操作(insert,delete,update)时就会激活它运行。经经常使用于加强数据的完整性约束和业务规则等。它与存储过程的差别是触发器不能运行EXCUTE语句调用,而是在用户运行Transact_SQL语句是自己主动触发运行。


          2、分类

          SQL Sever包含三种常规类型的触发器:

          1)DML触发器(经常使用)

          假设我们对某个表谢了相应的DML触发器,当数据库表中的数据发生相应的变化时(insert,delete,update),该触发器自己主动运行。其主要作用是强制运行业务规则,扩展SQL sever 约束、默认值等。

          可分为:

          a、AFTER 触发器

            包含insert触发器、update触发器和delete触发器,在这些操作运行后触发器才干触发,且仅仅能定义在表上。

          b、INSTEAD OF 触发器

            并不运行定义的相关操作,而是仅运行触发器本身。instead of 触发器能够在表上定义,也能够在试图上定义。

          

          2)DDL触发器

          主要用于审核与规范数据库中表、触发器、视图等结构上的操作。在数据库结构发生变化时运行(改动和新增列、新增表等),主要用来记录数据库的改动过程,以及限制程序猿对数据库的改动。


          3)登录触发器

          响应LOGIN时间而激发的存储过程。登录触发器在登录的身份验证阶段完毕之后切用户会话实际建立之前激发。假设身份验证失败,将不激发登录触发器。


          3、作用

          a、同意/限制对表的改动
          b、自己主动派生列,如自增字段
          c、强制数据的一致性
          d、提供审计和日志记录
          e 、防止无效的事务处理

          4、实例应用

          为了在实践中熟悉触发器,在机房收费注冊功能中应用了触发器。以此展示触发器的创建过程。

          由插入INSERT学生信息表的数据触发此触发器,进行注冊表和充值表的记录的插入操作,详细例如以下:

          1)在T_StuInfo表下建立触发器

          

          2)编写语句

    USE [JF_sys]
    GO
    /****** Object:  Trigger [dbo].[Register]    Script Date: 2014/8/11 21:06:12 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER TRIGGER [dbo].[Register]        --创建触发器
       ON  [dbo].[T_StuInfo]
       AFTER insert
    AS 
    	declare @CardID VARCHAR(10),       --參数
    			@StuID VARCHAR(10),
    			@RegDate varchar(10),
    			@RegTime varchar(10),
    			@UserID varchar(10),
    			@RegCash varchar(15),
    			@CheckStatus varchar(10)
    
    	select @CardID=CardID ,@UserID =UserID from inserted
    	select @RegCash =StuCash from inserted
    	select @StuID=StuID from inserted
    	
    	set @RegDate =CONVERT (varchar (10),GETDATE (),120)   --获取日期
    	set @RegTime =CONVERT (varchar (10),GETDATE (),108)   --获取时间
    
    
    BEGIN
        --引发操作:向注冊表和充值表中插入数据
    	insert into T_RegInfo (CardID ,StuID ,RegDate ,RegTime ,UserID ,RegCash ,CheckStatus ) values (@CardID , @StuID,@RegDate,@RegTime,@UserID,@RegCash,'未结账')
    	insert into T_RechargeInfo (CardID,RecDate,RecTime,RecCash,UserID,CheckStatus ) VALUES (@CardID ,@RegDate ,@RegTime ,@RegCash,@UserID,'未结账')
    END

          对新知识的应用可能存在欠缺,如有不恰当的地方,欢迎大家指出!

          

          

  • 相关阅读:
    十步完全理解SQL
    c#退出应用程序办法
    几个有意思的算法题
    GeoServer不同服务器安装配置、数据发布及客户端访问
    开启httpd服务的时候 显示Could not reliably determine the server`s fully qualified domain name
    Working With OpenLayers(Section 1: Creating a Basic Map)
    GeoServer地图开发解决方案(五):基于Silverlight技术的地图客户端实现
    模拟远程HTTP的POST请求
    模拟提交带附件的表单
    支付宝手机网站接口对接
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/3983064.html
Copyright © 2020-2023  润新知