文档章节

触发器摘录

青帝弟
 青帝弟
发布于 2016/01/07 17:11
字数 652
阅读 16
收藏 1
INSTEAD OF 触发器用来代替通常的触发动作,即当对表进行INSERT、UPDATE 或 DELETE 操作时,系统不是直接对表执行这些操作,而是把操作内容交给触发器,让触发器检查所进行的操作是否正确。如正确才进行相应的操作。因此,INSTEAD OF 触发器的动作要早于表的约束处理。
INSTEAD OF 触发器的操作有点类似于完整性约束。在对数据库的操纵时,有些情况下使用约束可以达到更好的效果,而如果采用触发器,则能定义比完整性约束更加复杂的约束。有关触发器与约束的比较,请参见联机丛书。
INSTEAD OF 触发器不仅可在表上定义,还可在带有一个或多个基表的视图上定义,但在作为级联引用完整性约束目标的表上限制应用。
AFTER 触发器定义了对表执行了 INSERT、UPDATE 或 DELETE 语句操作之后再执行的操作。比如对某个表中的数据进行了更新操作后,要求立即对相关的表进行指定的操作,这时就可以采用 AFTER 触发器。AFTER 触发器只能在表上指定,且动作晚于约束处理。
每一个表上只能创建一个 INSTEAD OF 触发器,但可以创建多个 AFTER 触发器。
实例:
INSTEAD OF 触发器:
向表“计0261”插入数据时,检查学号是否存在于表“计026”中,如存在则进行插入操作,否则就不插入。
SQL code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TRIGGER [checkid] ON [dbo].[计0261] 
INSTEAD OF insert
AS
IF NOT EXISTS(SELECT * FROM 计026 WHERE 学号=(SELECT 学号 FROM INSERTED))
  BEGIN
    ROLLBACK TRANSACTION
    PRINT '要处理记录的学号不存在!'
  END
ELSE
  BEGIN
    INSERT INTO 计0261 select * from inserted
    PRINT '已经成功处理记录!'
  END

AFTER 触发器:
对订货表设置 AFTER(FOR) 类型的 INSERT 触发器,用来在插入记录时自动将统计值计算到订货统计表中。
SQL code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TRIGGER [orderinsert] ON [dbo].[订货表]
AFTER INSERT
AS
DECLARE @bookid int, @ordernum int, @num int
SELECT @bookid = 书籍编号, @ordernum = 数量 FROM INSERTED
SELECT @num = count(书籍编号) FROM 订货统计表 WHERE 书籍编号=@bookid
IF @num = 0
  --未找到该书,插入记录
  INSERT INTO 订货统计表 VALUES(@bookid, @ordernum)
ELSE
  --找到该书,更新记录
  UPDATE 订货统计表
SET 总订货量 = 总订货量 + @ordernum WHERE 书籍编号 = @bookid
地址:http://bbs.csdn.net/topics/300074591

© 著作权归作者所有

上一篇: 触发器的优缺点
下一篇: SQL Server 触发器
青帝弟
粉丝 4
博文 18
码字总数 2782
作品 0
海淀
程序员
私信 提问
数据库外键的使用以及优缺点

摘录网上讨论共同观点: 主键和索引是不可少的,不仅可以优化数据检索速度,开发人员还省不其它的工作, 矛盾焦点:数据库设计是否需要外键。这里有两个问题:一个是如何保证数据库数据的完整...

凯文加内特
2016/01/15
101
0
Spring定时任务的简单例子

这几天因为工作的需要,用到了spring的定时任务的功能,网上查资料,并且实际运用了一下,觉得spring还是很智能化的,只需要配置一下配置文件就可以了,下面的这篇文章我觉得还是很好的,摘录...

Sandy_wu
2013/07/08
0
0
解忧杂货店:关于MySQL 5.7的188个精彩问答

原文:https://dev.mysql.com/doc/refman/5.7/en/faqs.html 译者:陈迪曙、谭磊、张旭光、杨皓 审校:葛云杰 策划:高强 编者按 为方便大家对MySQL 5.7的认识和学习,社群众译者倾力翻译了M...

DTO团队
2017/03/13
0
0
Oracle之PL/SQL学习笔记之触发器

Oracle之PL/SQL学习笔记之触发器 触发器是许多关系数据库系统都提供的一项技术。在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块。 触发器在数据库里以独立的...

残风vs逝梦
2014/09/10
0
0
不同类型的 SQL Server 触发器

简介 触发器是数据库对象。基本上当一个和触发器相关的数据定义语言或者数据操纵语言命令语句被执行时,这些特别类型的存储过程就会自动执行。触发器被用在数据定义语言和数据操纵语言命令语...

oschina
2013/07/21
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

HBase新建表报错 org.apache.hadoop.hbase.TableExistsException

之前安装了旧版本的hbase, 没有清理其在Zookeeper上的内容。 解决办法 stop-hbase.sh zkCli.sh >>> rmr /hbase >>> quit start-hbase.sh...

dreamness
3分钟前
0
0
大数据技术的应用现状与展望

本文是我即将由嵌入式底层驱动行业转入大数据研究领域的综述文章,案例摘自《程序员》电子期刊,由于初学者知识面较窄,查看文献量较少,因此后续还会在此基础上,继续跟踪并深入研究,为论文...

陈小君
9分钟前
0
0
NCRE考试感想 三级信息安全(上)

时间节点 报名时间:2017-06 考试时间:2017-09 查询成绩:2017-11   考试简述 满分100分,时间120分钟。题型有三种,选择题、综合题、应用题。   备考经验 题库是WLJY的,买了激活码。为了...

志成就
16分钟前
0
0
百度地图显示我的位置

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title></title><script type="text/javascript" src="jquery-1.8.2.min.js"></script></head><body><sec......

塔塔米
20分钟前
0
0
mysql mysql常用的常用函数

1. 数学函数 函 数 作 用 ABS(x) 返回x的绝对值 CEIL(x),CEILIN(x) 返回不小于x的最小整数值 FLOOR(x) 返回不大于x的最大整数值 RAND() 返回0~1的随机数 RAND(x) 返回0~1的随机数,x值相同返...

edison_kwok
52分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部