简单触发器的使用 献给SQL初学者

来源:asp之家 时间:2011-09-30 11:27:49 

首先,啰嗦几句废话如下:
  (1)触发器(trigger)是个特殊的存储过程,它的执行并不需要我们去显式调用,而是由一些事件触发,这有点类似C#中的事件处理机制。当使用UPDATE,INSERT  或DELETE的一种或多种对指定的数据库的相关表进行操作时,会触发触发器。
  (2)触发器可以包含复杂的SQL语句,主要用于强制复杂的业务规则或要求。
  (3)触发器能够维持数据库的完整性,当执行插入、更新或删除操作时,触发器会根据表与表之间的关系,强制保持其数据的完整性。
  
  好,啰嗦完了开始贴代码,首先贴上我创建的两张表所包含的列,他们的关联关系是1对多,以UserID进行关联。


然后来一个非常简单的触发器

代码如下:


IF EXISTS(SELECT * FROM sysobjects
WHERE name='tr_Users_OnUpdate' AND TYPE='TR')
DROP TRIGGER tr_Users_OnUpdate
GO --这里呢创建触发器与存储过程类似(都是DDL)
--先判断如否存在同名触发器就删除然后重建
CREATE TRIGGER tr_Users_OnUpdate
ON Users FOR UPDATE
AS PRINT ‘Users表已发生修改'
GO


上述代码中,tr_Users_OnUpdate为触发器名称,Users为表名。这触发器的作用是当向Users表执行Update时将打印“Users表已发生修改”。
  好了我们可以看到这个触发器的实用性不是很大,那么接下来呢我们再来学习下关于触发器里两种特殊的表“inserted”和“deleted”。这两张表主要用于触发器。Deleted 表用于存储 执行DELETE 和 UPDATE操作时所影响的行的副本。而Inserted 表则用于存储 INSERT 和 UPDATE 语句所影响的行的副本。那么我们看到执行UPDATE操作时都会有记录分别存储到“inserted”和“deleted”。其实理解起来不难deleted表存储的是Update之前的记录,而inserted存储的呢则是Update之后的记录,这里关于理论性东西我不再赘述,官方资料有更详细说明。
  现在我们要做的就是本文的重点,当往WordInfo添加一条记录时,使用触发器使UserInfo的相应记录的LeaveCount字段增加1。代码如下:

代码如下:


--添加留言的触发器
IF EXISTS(SELECT name FROM sysobjects WHERE name='tr_LeaveWord_Add' AND TYPE='TR')
DROP TRIGGER tr_LeaveWord_Add
GO
CREATE TRIGGER tr_LeaveWord_Add
ON WordInfo FOR INSERT
AS UPDATE UserInfo SET LeaveCount=LeaveCount+1
WHERE UserID=(SELECT TOP 1 UserID FROM Inserted)
GO


OK,到这里就可以收工了,值得注意的是如果触发器是UPDATE触发的,那么在执行Update后再查询更新之前的数据改成查询deleted表即可。

标签:触发器
0
投稿

猜你喜欢

  • 技巧和诀窍:用Silverlight支持全屏模式

    2007-09-23 12:37:00
  • MYSQL初学者使用指南[适用自己安装mysql者]

    2007-08-06 14:53:00
  • 深入MySQL数据库的索引

    2009-02-26 15:27:00
  • css:小技巧大问题,cellSpacing用css样式代替方法,其它样式类似解决!

    2009-10-04 20:35:00
  • P3P 和 跨域 (cross-domain) cookie 访问(读取和设置)

    2011-04-02 10:42:00
  • ASP应用:用stream读文件

    2007-09-24 13:33:00
  • XML文件的显示——CSS和XSL

    2007-10-15 18:48:00
  • ASP同一站点下gb2312和utf-8页面传递参数乱码的终极解决方法

    2011-02-20 11:00:00
  • 网页制作,改变你的思维方式

    2007-09-29 13:12:00
  • XML 问题: 超越DOM(轻松使用 DOM 的技巧和诀窍)

    2008-09-05 17:12:00
  • Web标准学习:CSS样式书写风格

    2008-03-25 09:37:00
  • 段正淳的css笔记(4)css代码的简写

    2007-11-01 22:03:00
  • position:relative/absolute无法冲破的等级

    2007-05-11 17:03:00
  • ASP进阶学习之认识数学函数

    2007-10-08 13:15:00
  • 在Asp程序中取得表单所有内容的方法

    2010-04-24 16:07:00
  • ASP验证码的实现原理及源码

    2007-10-02 12:14:00
  • 怎么样才能设计出漂亮的网页?

    2008-10-07 16:57:00
  • 网页栅格系统研究(4):技术实现

    2008-11-06 11:44:00
  • 《写给大家看的设计书》阅读笔记之对比原则

    2009-07-15 10:14:00
  • ASP给长的标题加省略号...

    2008-02-22 14:39:00
  • asp之家 网络编程 m.aspxhome.com