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

网络编程 2025-03-29 11:46www.168986.cn编程入门

献给SQL初学者的简单触发器使用指南——特别针对使用SQL Server的朋友们

在数据库的海洋里,触发器(trigger)是一个神秘的生物。它是特殊的存储过程,它的执行并不需要我们去显式调用,而是由一些事件触发。这就像C中的事件处理机制一样神奇。当你在数据库的指定表上进行UPDATE、INSERT或DELETE操作时,触发器就会自动启动。

啰嗦了几句废话后,让我们进入实战。假设我们有两张表,它们的关联关系是1对多,以UserID进行关联。

接下来,我会贴上一个非常简单的触发器代码。这是一个判断表是否存在的触发器,如果存在则删除并重新创建。这个触发器名为tr_Users_OnUpdate,作用于Users表,当对Users表进行更新操作时触发。触发器的功能是打印出“Users表已发生修改”。代码如下:

```sql

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

```

上述代码中,“inserted”和“deleted”是两个特殊的表,主要用于触发器。Deleted 表用于存储执行DELETE 和 UPDATE操作时所影响的行的副本,而Inserted 表则用于存储 INSERT 和 UPDATE 语句所影响的行的副本。当执行UPDATE操作时,“inserted”和“deleted”都会有记录。其中,deleted表存储的是Update之前的记录,而inserted存储的是Update之后的记录。

现在,我们进入本文的重点:当往WordInfo添加一条记录时,使用触发器使UserInfo的相应记录的LeaveCount字段增加1。代码如下:

```sql

--添加留言的触发器

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

```这样,每当你往WordInfo表添加一条记录时,UserInfo表中相应用户的LeaveCount字段就会自动增加1。这就是触发器的魅力所在。值得注意的是,如果触发器是由UPDATE触发的,那么在执行Update操作后需要查询deleted表来获取更新前的数据。这样你就可以轻松实现各种复杂的业务逻辑和数据维护操作了。

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by