简单触发器的使用 献给SQL初学者
献给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表来获取更新前的数据。这样你就可以轻松实现各种复杂的业务逻辑和数据维护操作了。
编程语言
- 简单触发器的使用 献给SQL初学者
- jQuery实现可兼容IE6的淡入淡出效果告警提示功能
- JQuery简单实现锚点链接的平滑滚动
- JS实现上下左右对称的九九乘法表
- JS常见问题之为什么点击弹出的i总是最后一个
- 微信小程序使用swiper组件实现类3D轮播图
- vue-cli配置全局sass、less变量的方法
- asp xml 缓存类
- js前端日历控件(悬浮、拖拽、自由变形)
- PHP使用内置函数file_put_contents写入文件及追加内容
- mysql 8.0.13手动安装教程
- SQL语句练习实例之一——找出最近的两次晋升日
- ADO与ADO.NET的区别与介绍
- Window下PHP三种运行方式图文详解
- java连不上mysql8.0问题的解决方法
- FileUpload上传图片前实现图片预览功能(附演示动画