触发器的概念和作用
opengauss函数和触发器

opengauss函数和触发器Opengauss函数和触发器Opengauss是一款开源的关系型数据库管理系统,它支持多种函数和触发器,这些功能使得Opengauss在数据处理和操作方面具有更高的灵活性和扩展性。
本文将介绍Opengauss函数和触发器的基本概念和用法,并探讨它们在实际应用中的重要性和优势。
一、Opengauss函数1. 函数的概念函数是一段预定义的可重用代码,用于执行特定的操作。
在Opengauss中,函数可以接收参数并返回一个值或一个结果集。
函数可以在SQL语句中直接调用,也可以作为触发器的一部分来执行特定的操作。
2. 内置函数Opengauss提供了许多内置函数,用于执行各种常见的数据操作和计算。
例如,数学函数(如sin、cos、sqrt等)、字符串函数(如concat、substring、length等)、日期函数(如now、date_part、date_trunc等)等。
这些内置函数可以大大简化数据处理的过程,并提高查询的效率。
3. 自定义函数除了内置函数,Opengauss还支持用户自定义函数,这使得用户可以根据自己的需求定义和使用特定的函数。
用户可以使用PL/pgSQL、Python、Java等语言编写自定义函数,并将其集成到Opengauss中。
这种灵活性使得Opengauss可以适应不同的应用场景,并满足个性化的数据处理需求。
二、Opengauss触发器1. 触发器的概念触发器是一种特殊的函数,它在数据库中的表上定义,并在特定的事件发生时自动触发。
这些事件可以是INSERT、UPDATE或DELETE 操作,当这些操作发生时,触发器会执行相应的操作。
触发器可以用于实现数据完整性约束、数据变化跟踪等功能。
2. 触发器的类型Opengauss支持多种类型的触发器,包括行级触发器和语句级触发器。
行级触发器在每一行上执行,而语句级触发器在每个语句执行一次。
行级触发器可以用于验证或修改特定行的数据,而语句级触发器可以用于执行一些与具体行无关的操作。
高中物理施密特触发器的物理原理教案

高中物理施密特触发器的物理原理教案一、引言在高中物理中,施密特触发器是电子电路中一个重要的概念。
本教案旨在介绍施密特触发器的物理原理以及相关应用。
二、施密特触发器的原理1. 基本概念施密特触发器是一种具有正反馈的电路,可以将输入信号转换为输出信号,并且具有两个阈值电压。
2. 工作原理当输入信号超过上阈值电压时,输出由低电平变为高电平;当输入信号低于下阈值电压时,输出由高电平变为低电平。
这种双稳态特性使得施密特触发器在模拟信号的数字化处理和数字电路的触发器设计中得到广泛应用。
三、施密特触发器的应用1. 信号处理施密特触发器可以用于判别模拟信号的高低电平,从而实现信号的数字化处理。
例如,可以用施密特触发器将模拟音频信号转换为数字音频信号,以便于后续的数字信号处理。
2. 时钟电路在数字电路中,施密特触发器常用于时钟电路的设计中。
通过设置适当的阈值电压和电容数值,可以实现稳定的时钟信号输出,用以同步其他数字电路的运行。
3. 触发器设计施密特触发器也是数字电路中常用的触发器类型之一。
通过利用其双稳态特性和正反馈回路,可以实现稳定的触发器功能,用于存储和传输数字信号。
四、实验演示为了更好地理解施密特触发器的原理,可以进行以下实验演示:实验材料:电压表、电路连接线、集成施密特触发器、电源。
实验步骤:1. 按照电路图正确连接集成施密特触发器电路。
2. 将电压表的正极和负极分别接入集成施密特触发器的输出端和地端。
3. 调节输入信号的幅值,观察输出信号的变化。
实验结果:当输入信号超过阈值电压时,输出由低电平切换为高电平;当输入信号低于阈值电压时,输出由高电平切换为低电平。
五、总结施密特触发器是一种具有正反馈的电子电路,具有双稳态特性,适用于模拟信号的数字化处理和数字电路的触发器设计。
通过适当的阈值电压设置和正反馈回路,可以实现稳定的触发器功能,用于存储和传输数字信号。
通过实验演示,可以更好地理解施密特触发器的原理和应用。
数字电路--触发器原理

2、CP=1时跟随,下降沿到来时才锁存, 锁存的内容是CP下降沿瞬间D的值。
D (b) CP 符号
(二)工作原理:
(a)
将S=D、R=D代入同步SR触发器的特性方程,得D锁存器的特性方程:
Q* S RQ = D+ DQ = D
CP=1期间有效
第五章
• §5.1 概述
• §5.2 SR 锁存器ne NhomakorabeatQ
0
1
Q
S
R
Q 0
1
& &
0
S
1
0
R
①R=0、S=1时:由于R=0,不论原来Q为0还是1,都有Q=1; 再由S=1、Q=1可得Q=0。即不论锁存器原来处于什么状态都 将变成0状态,这种情况称将锁存器置0或复位。 R端称为置0端或复位端。
ok
Q
1
0
Q
S 1
R 0
Q 0 1
&
&
0
1
S
0
1
R
②R=1、S=0时:由于S=0,不论原来Q为0还是1,都有Q=1; 再由R=1、Q=1可得Q=0。即不论锁存器原来处于什么状态都 将变成1状态,这种情况称将锁存器置1或置位。
Q* Q
Q* 0
保持 置0 置1
特 性 表
0 0 1 1 1 1
Q* 1
Q* Q
翻转
主要特点
①主从JK触发器采用主从控制结构,从根本上解决了输入信号直 接控制的问题,具有CP=1期间接收输入信号,CP下降沿到来 时触发翻转的特点。 ②输入信号J、K之间没有约束。 ③存在一次变化问题。
二、触发器的两个基本特点: 1.具有两个稳定状态—0状态和1状态 2.能够接收、保存和输出信号
D触发器工作原理

D触发器工作原理引言概述:D触发器是数字电路中常用的一种触发器,它具有存储和传输数据的功能。
本文将详细介绍D触发器的工作原理,包括其基本概念、输入输出特性、内部结构以及应用场景。
一、基本概念1.1 D触发器的定义D触发器是一种具有两个稳定状态的数字电路元件,它可以存储和传输一个二进制位的数据。
它的输出状态取决于其输入状态和时钟信号。
1.2 D触发器的输入输出D触发器有两个输入端:数据输入端D和时钟输入端CLK。
它有两个输出端:输出端Q和输出端Q'(Q的补码)。
1.3 D触发器的稳定状态D触发器的稳定状态是指在无时钟信号输入时,D触发器的输出状态保持不变。
D触发器有两个稳定状态:低电平(0)和高电平(1)。
二、输入输出特性2.1 数据输入端DD触发器的数据输入端D可以接受0或1的逻辑电平。
当时钟信号到来时,D触发器会根据D端的电平状态来决定输出端Q的电平状态。
2.2 时钟输入端CLK时钟输入端CLK用于控制D触发器的状态转换。
当时钟信号发生上升沿或下降沿时,D触发器会根据当前D端的电平状态更新输出端Q的电平状态。
2.3 输出端Q和输出端Q'输出端Q和输出端Q'是D触发器的输出端,它们分别表示当前的输出状态和其补码。
当时钟信号到来时,D触发器会根据输入端D的电平状态更新输出端Q 和Q'的电平状态。
三、内部结构3.1 RS触发器D触发器的内部结构通常是基于RS触发器实现的。
RS触发器由两个交叉连接的反相器和两个交叉连接的与门组成,其中一个反相器的输出与另一个反相器的输入相连。
3.2 时钟信号的作用时钟信号的作用是控制RS触发器的状态转换。
当时钟信号发生上升沿或下降沿时,RS触发器的状态会根据输入端D的电平状态进行更新。
3.3 D触发器的边沿触发D触发器是一种边沿触发器,即在时钟信号的边沿(上升沿或下降沿)时才会更新输出状态。
这种触发方式可以有效避免由于输入端D的变化导致的输出状态抖动。
汇报课教案基本RS触发器

汇报课教案-基本RS触发器教学目标:1. 了解基本RS触发器的概念和作用;2. 掌握基本RS触发器的真值表和逻辑图;3. 能够运用基本RS触发器设计简单的数字电路。
教学内容:一、基本RS触发器的概念1. 引入触发器的概念,让学生了解触发器在数字电路中的重要性;2. 讲解基本RS触发器的定义和作用;3. 通过示例电路图,让学生了解基本RS触发器的构成。
二、基本RS触发器的真值表1. 讲解基本RS触发器的真值表及其含义;2. 通过真值表,让学生了解基本RS触发器的输入输出关系;3. 让学生通过真值表,分析基本RS触发器的工作原理。
三、基本RS触发器的逻辑图1. 讲解基本RS触发器的逻辑图及其含义;2. 通过逻辑图,让学生了解基本RS触发器的输入输出关系;3. 让学生通过逻辑图,分析基本RS触发器的工作原理。
四、基本RS触发器的应用1. 讲解基本RS触发器在数字电路中的应用案例;2. 让学生了解基本RS触发器在实际电路中的作用;3. 引导学生思考如何运用基本RS触发器设计简单的数字电路。
五、课堂练习1. 根据真值表,分析基本RS触发器的工作状态;2. 根据逻辑图,分析基本RS触发器的工作状态;3. 设计一个简单的数字电路,运用基本RS触发器实现指定功能。
教学评价:1. 学生能准确回答基本RS触发器的概念和作用;2. 学生能理解并应用基本RS触发器的真值表和逻辑图;3. 学生能运用基本RS触发器设计简单的数字电路。
六、基本RS触发器的时序分析1. 讲解基本RS触发器时序分析的方法;2. 通过时序图,让学生了解基本RS触发器的工作过程;3. 分析不同输入序列下基本RS触发器的状态变化。
七、基本RS触发器的稳定性问题1. 讲解基本RS触发器稳定性问题的原因;2. 引导学生了解如何避免基本RS触发器的稳定性问题;3. 通过实例,让学生掌握解决基本RS触发器稳定性问题的方法。
八、基本RS触发器的扩展1. 讲解基本RS触发器扩展的概念和作用;2. 介绍基本RS触发器扩展的方法;3. 让学生了解如何利用基本RS触发器扩展实现更复杂的数字电路。
wincc变量触发器概念

wincc变量触发器概念
WinCC的变量触发器是一种机制,它通过监听特定变量的数值变化或状态变化,来自动触发相应的事件或操作。
当变量的数值或状态满足预设的条件时,系统将执行相应的逻辑或操作。
这种自动触发的功能大大提高了WinCC系统的智能化和自动化程度,减轻了操作员的负担,提高了生产效率。
在WinCC中,您可以使用变量触发器来触发各种事件,比如:
1. 启动/停止特定的操作或过程:您可以设置当某个变量的值达到预设的阈值时,触发操作或过程的启动或停止。
2. 报警通知:当特定变量的值超出预设的范围时,您可以设置系统发出报警通知,通知操作员采取相应的措施。
3. 记录日志:您还可以设置当特定变量的值发生变化时,系统自动记录相应的日志信息,以便后续分析和追溯。
4. 动态修改其他变量的值:当某个变量的值满足特定条件时,您可以触发系统动态修改其他变量的值,以实现复杂的逻辑控制。
此外,变量触发器还可以实现与其他WinCC功能(如趋势图、报表等)的联动,以实现更复杂的过程控制和监控任务。
总的来说,WinCC的变量触发器是一种非常强大的工具,可以帮助您实现更智能、更自动化的过程控制和监控。
数据库触发器实验实训报告
一、实验背景随着信息技术的飞速发展,数据库技术在各行各业中的应用越来越广泛。
数据库触发器作为数据库管理系统的重要组成部分,具有强大的功能,能够帮助用户实现复杂的数据操作和业务逻辑。
为了提高学生对数据库触发器的理解与应用能力,我们开展了数据库触发器实验实训。
二、实验目的1. 掌握触发器的概念、作用及分类;2. 熟悉触发器的创建、修改和删除操作;3. 学会使用触发器实现业务规则和数据完整性;4. 提高数据库编程能力,为以后的实际工作打下基础。
三、实验环境1. 操作系统:Windows 102. 数据库:MySQL 5.73. 编程语言:Python四、实验内容1. 触发器的基本概念触发器是一种特殊的存储过程,它在特定事件发生时自动执行。
触发器可以分为两大类:DML触发器和DDL触发器。
DML触发器包括INSERT、UPDATE和DELETE触发器,用于在数据操作时执行特定的逻辑;DDL触发器用于在数据定义语言操作时执行特定的逻辑。
2. 触发器的创建以MySQL为例,创建触发器的语法如下:DELIMITER //CREATE TRIGGER 触发器名称BEFORE|AFTER INSERT|UPDATE|DELETE ON 表名BEGIN-- 触发器逻辑END;//DELIMITER ;例如,创建一个名为before_insert_trigger的触发器,在向bookinfo表插入数据之前执行:DELIMITER //CREATE TRIGGER before_insert_triggerBEFORE INSERT ON bookinfoFOR EACH ROWBEGINIF NEW.price > 100 THENSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Book price should not exceed 100';END IF;END;//DELIMITER ;3. 触发器的修改修改触发器的语法与创建触发器类似,只需要使用ALTER TRIGGER语句:ALTER TRIGGER 触发器名称BEFORE|AFTER INSERT|UPDATE|DELETE ON 表名BEGIN-- 触发器逻辑END;例如,修改上述触发器,限制书籍价格不超过50元:DELIMITER //ALTER TRIGGER before_insert_triggerBEFORE INSERT ON bookinfoFOR EACH ROWBEGINIF NEW.price > 50 THENSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Book price should not exceed 50';END IF;END;//DELIMITER ;4. 触发器的删除删除触发器的语法如下:DROP TRIGGER IF EXISTS 触发器名称;例如,删除上述触发器:DROP TRIGGER IF EXISTS before_insert_trigger;5. 触发器与存储过程的区别触发器和存储过程都是数据库编程的重要工具,但它们之间存在一些区别:(1)触发器在特定事件发生时自动执行,而存储过程需要手动调用;(2)触发器只能包含一个语句块,而存储过程可以包含多个语句块;(3)触发器不能返回结果集,而存储过程可以返回结果集。
教案模板大学数据库触发器
课程名称:数据库原理与应用授课教师:[教师姓名]授课班级:[班级名称]授课时间:[具体日期] 第[周次]节课时:2课时一、教学目标1. 知识目标:(1)理解触发器的概念、作用和类型。
(2)掌握触发器的创建、修改和删除方法。
(3)了解触发器在数据库中的应用场景。
2. 能力目标:(1)能够根据实际需求设计触发器。
(2)能够调试和优化触发器,提高数据库性能。
(3)能够解决触发器在应用过程中遇到的问题。
二、教学内容1. 触发器概述(1)触发器的概念(2)触发器的作用(3)触发器的类型2. 触发器的创建(1)触发器的语法结构(2)触发器的参数和条件(3)触发器的实现方式3. 触发器的修改和删除(1)修改触发器的语法结构(2)删除触发器的方法4. 触发器的应用场景(1)数据完整性约束(2)数据审计(3)自动执行业务逻辑三、教学过程1. 导入新课教师简要介绍触发器的概念和作用,激发学生的学习兴趣。
2. 讲授新课(1)触发器概述教师讲解触发器的概念、作用和类型,通过实例说明触发器的实际应用。
(2)触发器的创建教师演示触发器的创建过程,讲解触发器的语法结构、参数和条件,并指导学生进行实践操作。
(3)触发器的修改和删除教师讲解触发器的修改和删除方法,通过实例说明如何优化触发器,提高数据库性能。
(4)触发器的应用场景教师讲解触发器在数据完整性约束、数据审计和自动执行业务逻辑等方面的应用,引导学生思考触发器的实际应用。
3. 课堂练习教师布置练习题,要求学生在课下完成,巩固所学知识。
4. 课堂小结教师总结本节课的重点内容,强调触发器的实际应用和注意事项。
四、教学评价1. 学生对触发器的理解程度2. 学生对触发器创建、修改和删除的掌握程度3. 学生在课堂练习中的表现4. 学生对触发器应用场景的掌握程度五、教学资源1. 教材:《数据库原理与应用》2. 参考资料:相关数据库技术网站、学术论文等3. 教学课件:触发器概述、触发器创建、修改和删除、触发器应用场景等注:本教案模板仅供参考,教师可根据实际情况进行调整。
基本RS触发器
项目:由与非门构成的基本RS触发器
项目导入 组合电路的定义?
构成其电路的门电路有何特点?
组合电路与时序电路的区别?
门电路: 在某一时刻的输出信号完全取决于该 时刻的输入信号,没有记忆作用。
告知资讯
一、触发器的概念
1、触发器:具有记忆功能的基本逻辑电路,能存储二进制信 息(数字信息)。
初步训练
Q
G1
Q
&
SD
&
G2
RD
在实验台上用一片74LS00完成电路的连接,改变输入状 态观察输出现象,并记录。
强化训练
Q
G1
Q
&
SD
&
G2
RD
1、根据测试结果编写特性表,看是否与课本特性表一 致,若不一致查找原因。
检查评价
项目总结
1、基本RS触发器是直接触发电路,需要熟记特 性表。 2、会用实验台观察测试结果。
电路结构:
G1
Q
Q
Q
S
Q
R
&
SD
&
G2
RD
SD RD
特性: (1)当 RD =0, S D =1时,触发器置0 (2)当 RD =1, S D =0时,触发器置1 (3)当 RD =1, S D =1时,触发器置保持原状态 (4)当 RD=0, S D =0时,触发器状态不定
告知资讯
三、与非型基本RS触发器特性表
课后作业
1、继续完成任务单。 2、预习下节课的内容 。
2、触发器有三个基本特性:
(1)有两个稳态,可分别表示二进制数码0和1,无外触发时可维持稳 态;
(2)外触发下,两个稳态可相互转换(称翻转),已转换的稳定 状态可长期保持下来,这就使得触发器能够记忆二进制信息,常 用作二进制存储单元。
Powerpoint的触发器教案
PowerPoint的触发器教案教学目标:1. 了解PowerPoint触发器的概念和作用;2. 学会使用PowerPoint触发器实现交互效果;3. 掌握触发器的设置和编辑方法;4. 能够运用触发器提高演示文稿的趣味性和互动性。
教学内容:第一章:触发器概述1.1 触发器的定义1.2 触发器的作用1.3 触发器与动画的关系第二章:添加和设置触发器2.1 添加触发器的方法2.2 设置触发器的属性2.3 触发器的编辑和修改第三章:触发器在动画中的应用3.1 基本动画触发器3.2 组合动画触发器3.3 动画序列触发器第四章:触发器在交互中的应用4.1 按钮触发器4.2 条件触发器4.3 事件触发器第五章:触发器的实战应用5.1 触发器在教学演示中的应用5.2 触发器在企业培训中的应用5.3 触发器在商业演示中的应用教学方法:1. 讲授法:讲解触发器的概念、作用和设置方法;2. 演示法:展示触发器在实际中的应用案例;3. 实践法:让学生动手操作,实际设置和应用触发器;4. 讨论法:分组讨论,分享触发器的使用心得和创意。
教学评估:1. 课堂问答:检查学生对触发器概念的理解;2. 操作练习:评估学生设置和应用触发器的熟练程度;3. 创意展示:评价学生触发器的创新使用和趣味性;4. 课后作业:收集学生对触发器的实践体会和心得。
教学资源:1. PowerPoint软件;2. 教学PPT;3. 触发器应用案例素材;4. 学生分组讨论材料。
第六章:触发器的的高级应用6.1 触发器的嵌套使用6.2 触发器与条件动作的结合6.3 触发器在复杂动画中的综合应用第七章:触发器在多媒体教学中的应用7.1 多媒体教学概述7.2 触发器在多媒体教学中的优势7.3 触发器在多媒体教学案例分析第八章:触发器在企业培训中的应用8.1 企业培训概述8.2 触发器在企业培训中的优势8.3 触发器在企业培训案例分析第九章:触发器在商业演示中的应用9.1 商业演示概述9.2 触发器在商业演示中的优势9.3 触发器在商业演示案例分析第十章:触发器的创新应用与实践10.1 触发器创新应用的理念10.2 触发器创新应用的方法10.3 触发器创新应用的实践案例教学方法:1. 讲授法:讲解触发器的高级应用、多媒体教学、企业培训和商业演示的相关概念;2. 演示法:展示触发器在实际中的应用案例;3. 实践法:让学生动手操作,实际设置和应用触发器;4. 案例分析法:分析实际案例,让学生了解触发器在不同场景中的应用;5. 讨论法:分组讨论,分享触发器的使用心得和创意。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
触发器的概念和作用2010-08-30 21:11:38| 分类:sql2000 | 标签:|字号大中小订阅在SQL Server 2005里,可以用两种方法来保证数据的有效性和完整性:约束(check)和触发器(Trigger)。
约束是直接设置于数据表内,只能现实一些比较简单的功能操作,如:实现字段有效性和唯一性的检查、自动填入默认值、确保字段数据不重复(即主键)、确保数据表对应的完整性(即外键)等功能。
触发器是针对数据表(库)的特殊的存储过程,当这个表发生了Insert、Update或Delete操作时,会自动激活执行的,可以处理各种复杂的操作。
在SQL Server 2005中,触发器有了更进一步的功能,在数据表(库)发生Create、Alter和Drop操作时,也会自动激活执行。
触发器常用的一些功能如下:l 完成比约束更复杂的数据约束:触发器可以实现比约束更为复杂的数据约束l检查所做的SQL是否允许:触发器可以检查SQL所做的操作是否被允许。
例如:在产品库存表里,如果要删除一条产品记录,在删除记录时,触发器可以检查该产品库存数量是否为零,如果不为零则取消该删除操作。
l 修改其它数据表里的数据:当一个SQL语句对数据表进行操作的时候,触发器可以根据该SQL语句的操作情况来对另一个数据表进行操作。
例如:一个订单取消的时候,那么触发器可以自动修改产品库存表,在订购量的字段上减去被取消订单的订购数量。
l 调用更多的存储过程:约束的本身是不能调用存储过程的,但是触发器本身就是一种存储过程,而存储过程是可以嵌套使用的,所以触发器也可以调用一个或多过存储过程。
l 发送SQL Mail:在SQL语句执行完之后,触发器可以判断更改过的记录是否达到一定条件,如果达到这个条件的话,触发器可以自动调用SQL Mail来发送邮件。
例如:当一个订单交费之后,可以物流人员发送Email,通知他尽快发货。
l 返回自定义的错误信息:约束是不能返回信息的,而触发器可以。
例如插入一条重复记录时,可以返回一个具体的友好的错误信息给前台应用程序。
l 更改原本要操作的SQL语句:触发器可以修改原本要操作的SQL语句,例如原本的SQL语句是要删除数据表里的记录,但该数据表里的记录是最要记录,不允许删除的,那么触发器可以不执行该语句。
l 防止数据表构结更改或数据表被删除:为了保护已经建好的数据表,触发器可以在接收到Drop和Alter开头的SQL语句里,不进行对数据表的操作。
11.1.2 触发器的种类在SQL Server 2005中,触发器可以分为两大类:DML触发器和DDL触发器l DML触发器:DML触发器是当数据库服务器中发生数据操作语言(Data Manipulation Language)事件时执行的存储过程。
DML触发器又分为两类:After触发器和Instead Of触发器l DDL触发器:DDL触发器是在响应数据定义语言(Data Definition Language)事件时执行的存储过程。
DDL触发器一般用于执行数据库中管理任务。
如审核和规范数据库操作、防止数据库表结构被修改等。
11.2 DML触发器的分类SQL Server 2005的DML触发器分为两类:l After触发器:这类触发器是在记录已经改变完之后(after),才会被激活执行,它主要是用于记录变更后的处理或检查,一旦发现错误,也可以用Rollback Transaction语句来回滚本次的操作。
l Instead Of触发器:这类触发器一般是用来取代原本的操作,在记录变更之前发生的,它并不去执行原来SQL语句里的操作(Insert、Update、Delete),而去执行触发器本身所定义的操作。
11.3 DML触发器的工作原理在SQL Server 2005里,为每个DML触发器都定义了两个特殊的表,一个是插入表,一个是删除表。
这两个表是建在数据库服务器的内存中的,是由系统管理的逻辑表,而不是真正存储在数据库中的物理表。
对于这两个表,用户只有读取的权限,没有修改的权限。
这两个表的结构与触发器所在数据表的结构是完全一致的,当触发器的工作完成之后,这两个表也将会从内存中删除。
插入表里存放的是更新前的记录:对于插入记录操作来说,插入表里存放的是要插入的数据;对于更新记录操作来说,插入表里存放的是要更新的记录。
删除表里存放的是更新后的记录:对于更新记录操作来说,删除表里存放的是更新前的记录(更新完后即被删除);对于删除记录操作来说,删除表里存入的是被删除的旧记录。
下面看一下触发器的工作原理。
11.3.1 After触发器的工作原理After触发器是在记录变更完之后才被激活执行的。
以删除记录为例:当SQL Server接收到一个要执行删除操作的SQL语句时,SQL Server先将要删除的记录存放在删除表里,然后把数据表里的记录删除,再激活After触发器,执行After触发器里的SQL语句。
执行完毕之后,删除内存中的删除表,退出整个操作。
还是举上面的例子:在产品库存表里,如果要删除一条产品记录,在删除记录时,触发器可以检查该产品库存数量是否为零,如果不为零则取消删除操作。
看一下数据库是怎么操作的:(1)接收SQL语句,将要从产品库存表里删除的产品记录取出来,放在删除表里。
(2)从产品库存表里删除该产品记录。
(3)从删除表里读出该产品的库存数量字段,判断是不是为零,如果为零的话,完成操作,从内存里清除删除表;如果不为零的话,用Rollback Transaction语句来回滚操作。
11.3.2 Instead Of触发器的工作原理Instead Of触发器与After触发器不同。
After触发器是在Insert、Update和Delete操作完成后才激活的,而Instead Of触发器,是在这些操作进行之前就激活了,并且不再去执行原来的SQL操作,而去运行触发器本身的SQL语句。
11.4 设计DML触发器的注意事项及技巧在了解触发器的种类和工作理由之后,现在可以开始动手来设计触发器了,不过在动手之前,还有一些注意事项必须先了解一下:11.4.1 设计触发器的限制在触发器中,有一些SQL语句是不能使用的,这些语句包括:表11.1 在DML触发器中不能使用的语句(3)右击【触发器】,在弹出的快捷菜单中选择【新建触发器】选项,此时会自动弹出【查询编辑器】对话框,在【查询编辑器】的编辑区里SQL Server已经预写入了一些建立触发器相关的SQL语句,如图11.2所示。
图11.2 SQL Server 2005预写的触发器代码(4)修改【查询编辑器】里的代码,将从“CREATE”开始到“GO”结束的代码改为以下代码:CREATE TRIGGER 产品_InsertON 产品AFTER INSERTASBEGINprint '又添加了一种产品'ENDGO如果有兴趣的话,也可以去修改一下如图11.2中绿色部分的版权信息。
(5)单击工具栏中的【分析】按钮,检查一下是否语法有错,如果在下面的【结果】对话框中出现“命令已成功完成”,则表示语法没有错误。
(6)语法检查无误后,单击【执行】按钮,生成触发器。
(7)关掉查询编辑器对话框,刷新一下触发器对话框,可以看到刚才建立的【产品_Insert】触发器。
建立After Update触发器、After Delete触发器和建立After Insert触发器的步骤一致,不同的地方是把上面的SQL语句中的AFTER INSERT分别改为AFTER UPDATE和AFTER DELETE即可,如下所示,有兴趣的读者可以自行测试。
CREATE TRIGGER 产品_UpdateON 产品AFTER UPDATEASBEGINprint '有一种产品更改了'ENDGOCREATE TRIGGER 产品_DeleteON 产品AFTER DELETEASBEGINprint '又删除了一种产品'ENDGO11.5.2 测试触发器功能建好After Insert触发器之后,现在来测试一下触发器是怎么样被激活的。
(1)在Management Studio里新建一个查询,在弹出的【查询编辑器】对话框里输入以下代码:INSERT INTO 产品(产品名称) VALUES ('大苹果')(2)单击【执行】按钮,可以看到【消息】对话框里显示出一句提示:“又添加了一种产品”,这说明,After Insert触发器被激活,并运行成功了。
而如果在【查询编辑器】里执行的不是一个Insert语句,而是一个Delete语句的话,After Insert触发器将不会被激活。
如在【查询编辑器】输入以下语句:DELETE FROM 产品WHERE (产品名称= '大苹果')单击【执行】按钮,在【消息】对话框里只显示了一句“(1行受影响)”的提示,而没有“又添加了一种产品”的提示。
这是因为Delete语句是不能激活After Insert触发器,所以After Insert触发器里的“print ‘又添加了一种产品’”语句并没有执行。
11.5.3 建立触发器的SQL语句回顾一下,在Management Studio新建一个触发器的时候,它在查询分析对话框给预设了一些SQL 代码,这些代码其实上就是建立触发器的语法提示。
现在来看一下完整的触发器语法代码:CREATE TRIGGER <Schema_Name, sysname, Schema_Name>.<Trigger_Name, sysname, Trigger_Name>ON <Schema_Name, sysname, Schema_Name>.<Table_Name, sysname, Table_Name>AFTER <Data_Modification_Statements, , INSERT,DELETE,UPDATE>ASBEGIN-- SET NOCOUNT ON added to prevent extra result sets from-- interfering with SELECT statements.SET NOCOUNT ON;-- Insert statements for trigger hereENDGO用中文改了一下,以上代码就一目了然了:CREATE TRIGGER 触发器名ON 数据表名或视图名AFTER INSERT或DELETE或UPDATEASBEGIN--这里是要运行的SQL语句ENDGO现在再对上面的代码进行进一步的说明:l CREATE TRIGGER 触发器名:这一句声明SQL语句是用来建立一个触发器。