MS SQL入门基础:触发器概述

  在上面几节我们介绍了一般意义的存储过程,即用户自定义的存储过程和系统存储过程。本节将介绍一种特殊的存储过程,即触发器。在余下各节中我们将对触发器的概念、作用以及对其的使用方法作详尽介绍,使读者了解如何定义触发器,创建和使用各种不同复杂程度的触发器。

  12.5.1 触发器的概念及作用

  触发器是一种特殊类型的存储过程,它不同于我们前面介绍过的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。当对某一表进行诸如UPDATE、 INSERT、 DELETE 这些操作时,SQL Server 就会自动执行触发器所定义的SQL 语句,从而确保对数据的处理必须符合由这些SQL 语句所定义的规则。

  触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。除此之外,触发器还有其它许多不同的功能:

  (1) 强化约束(Enforce restriction)

  触发器能够实现比CHECK 语句更为复杂的约束。

  (2) 跟踪变化Auditing changes

  触发器可以侦测数据库内的操作,从而不允许数据库中未经许可的指定更新和变化。

(3) 级联运行(Cascaded operation)。

  触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。例如,某个表上的触发器中包含有对另外一个表的数据操作(如删除,更新,插入)而该操作又导致该表上触发器被触发。

  (4) 存储过程的调用(Stored procedure invocation)。

  为了响应数据库更新触,发器可以调用一个或多个存储过程,甚至可以通过外部过程的调用而在DBMS( 数据库管理系统)本身之外进行操作。

  由此可见,触发器可以解决高级形式的业务规则或复杂行为限制以及实现定制记录等一些方面的问题。例如,触发器能够找出某一表在数据修改前后状态发生的差异,并根据这种差异执行一定的处理。此外一个表的同一类型(INSERT、 UPDATE、 DELETE)的多个触发器能够对同一种数据操作采取多种不同的处理。

  总体而言,触发器性能通常比较低。当运行触发器时,系统处理的大部分时间花费在参照其它表的这一处理上,因为这些表既不在内存中也不在数据库设备上,而删除表和插入表总是位于内存中。可见触发器所参照的其它表的位置决定了操作要花费的时间长短。

  12.5.2 触发器的种类

  SQL Server 2000 支持两种类型的触发器:AFTER 触发器和INSTEAD OF 触发器。其中AFTER 触发器即为SQL Server 2000 版本以前所介绍的触发器。该类型触发器要求只有执行某一操作(INSERT UPDATE DELETE) 之后,触发器才被触发,且只能在表上定义。可以为针对表的同一操作定义多个触发器。对于AFTER 触发器,可以定义哪一个触发器被最先触发,哪一个被最后触发,通常使用系统过程sp_settriggerorder 来完成此任务。
  INSTEAD OF 触发器表示并不执行其所定义的操作(INSERT、 UPDATE、 DELETE),而仅是执行触发器本身。既可在表上定义INSTEAD OF 触发器,也可以在视图上定义INSTEAD OF 触发器,但对同一操作只能定义一个INSTEAD OF 触发器。

转载于:https://www.cnblogs.com/Athrun/archive/2007/07/27/833321.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497064.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python集合(set)类型的操作

菜鸟教程:Python3 集合:https://www.runoob.com/python3/python3-set.html Python 的 集合(set)和 其他语言类似,是一个无序的不重复元素序列。可以使用大括号 { } 或者 set() 函数创建集合。基本功能包括关系测试和消…

一个线程池中的线程异常了,那么线程池会怎么处理这个线程?

来源:一个线程池中的线程异常了,那么线程池会怎么处理这个线程? - 反光的小鱼儿 - 博客园 一个线程池中的线程异常了,那么线程池会怎么处理这个线程? 目录 线程池常用问题 不允许使用的原因测试流程 测试用例抛出堆栈异常为啥对了一半?怎…

深度学习:技术原理、迭代路径与局限

来源:36氪作者:何沛宽本文尝试复盘梳理深度学习目前的技术要点,深度学习中模型迭代的方向,以及改进后存在的局限。第一部分:深度学习技术基本要素:神经元、神经网络、分类器、可视化框架在深度学习领域&…

简单而直接的Python web 框架:web.py

From:https://www.oschina.net/question/5189_4306 Web.py github 地址:https://github.com/webpy/webpy https://pypi.python.org/pypi/web.py Web.py Cookbook 简体中文版:http://webpy.org/cookbook/index.zh-cn web.py 0.3 新…

ASP.NET页面的结构

ASP.NET页面的结构一、页指令: 包括Assembly(将一个程序集连接到当前页或用户控件)、 Control(.ascx,定义与控件相关的属性,这些属性指导控件编译器的行为)、 Implements(说明该页面或该用户控件…

用图表说话--导言

有些时候不用图表反而做得更好 1、有时候用图表来表示某种精确的内容(如:范围和预期),可能产生误导 2、有时候有些数据(如:公司的损益情况)听众和读者都已习惯了一种固定的表述方式&…

1102 Invert a Binary Tree(甲级)

1102 Invert a Binary Tree (25分) The following is from Max Howell twitter: Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off. Now it’s your turn to prove that YOU CAN invert…

从寻找可敬的人类开始,扩展未来人类生存的8个维度

来源:资本实验室作者:李鑫从小村庄到大城市,从国内到国外,从地球到月球,从太阳系到银河系……什么样的距离才是最远的距离?从地球的内部,到每一个原子,再到我们的情绪,哪…

开源 Python网络爬虫框架 Scrapy

开源 Python 网络爬虫框架 Scrapy:http://blog.csdn.net/zbyufei/article/details/7554322 介绍 所谓网络爬虫,就是一个在网上到处或定向抓取数据的程序,当然,这种说法不够专业,更专业的描述就是,抓取特定网…

SQL2005结合ROW_NUMBER()高效分页存储过程

SQL2005结合ROW_NUMBER()高效分页存储过程:CREATE PROCEDURE [dbo].[sp_Accounts_GetUserListPaged] PageIndex INT, PageSize INT AS BEGIN WITH UserList AS ( SELECT ROW_NUMBER() OVER (ORDER BY RegDate DESC)AS Row, * FROM Accounts_Users) SELECT …

微服务架构设计模式~为应用程序定义微服务架构

为应用程序定义微服务架构 第一步:定义系统操作 第二步:定义服务 第三步:定义服务API和协作方式 第一步:定义系统操作 第二步:定义服务 第三步:定义服务API和协作方式

1079 Total Sales of Supply Chain(甲级)

1079 Total Sales of Supply Chain (25分) A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone involved in moving a product from supplier to…

用 Python 爬虫框架 Scrapy 爬取心目中的女神

From :http://www.cnblogs.com/wanghzh/p/5824181.html 本博文将带领你从入门到精通爬虫框架 Scrapy,最终具备爬取任何网页的数据的能力。 本文以校花网为例进行爬取,校花网:http://www.xiaohuar.com 让你体验爬取校花的成就感。 …

深入Atlas系列:综合示例(1) - 调用服务器端方法时直接获得客户端具体类型...

摘要: 在使用ASP.NET AJAX时,大家对于返回服务器端的复杂类型的情况经常会遇到问题。Dflying兄写了一篇文章来说明在如何在客户端得到Sys.Preview.Data.DataTable对象的文章,但是这种方法需要在客户端进行Sys.Preview.Data.DataTable的构造,那…

1090 Highest Price in Supply Chain(甲级)

1090 Highest Price in Supply Chain (25分) A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone involved in moving a product from supplier …

微服务架构设计模式~识别系统操作

第一步:创建由关键类组成的抽象领域模型,这些关键类提供用于描述系统操作的词汇表; 第二步:确定系统操作,并根据领域模型描述每个系统操作的行为 领域模型主要源自用户故事中提及的名词,系统操作主要来自用…

Facebook、微软、谷歌三大研究巨头齐聚首,共同探讨人工智能发展现状和趋势

作者: 思颖、李诗概要:日前 AAAS 在 reddit 上组织了一场问答,Facebook 人工智能研究院 Yann LeCun,微软研究院院长 Eric Horvitz,谷歌研究总监 Peter Norvig 共同出席此次活动,回答了观众提出的一系列问题…

《大话设计模式》Python 版代码实现

From:http://www.cnblogs.com/wuyuegb2312/archive/2013/04/09/3008320.html 一、简单工厂模式 模式特点:工厂根据条件产生不同功能的类。 程序实例:四则运算计算器,根据用户的输入产生相应的运算类,用这个运算类处理具…

LeCun亲授的深度学习入门课:从飞行器的发明到卷积神经网络

Root 编译整理量子位 出品 | 公众号 QbitAI深度学习和人脑有什么关系?计算机是如何识别各种物体的?我们怎样构建人工大脑?这是深度学习入门者绕不过的几个问题。很幸运,这里有位大牛很乐意为你讲解。2月6日,UCLA&#…

微服务架构设计模式~根据业务能力进行服务拆分

业务能力定义了一个组织的工作 组织的业务能力通常是指这个组织的业务是做什么,它们通常是稳定的。 与之相反,组织采用何种方式来实现它的业务能力,是随着时间不断变化的。 识别业务能力 一个组织有哪些业务能力,是通过对组织的…