触发器(trigger
)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert
,delete
, update
)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。
触发器可以查询其他表,而且可以包含复杂的 SQL
语句。它们主要用于强制服从复杂的业务规则或要求。
触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。
约束和触发器在特殊情况下各有优势。触发器的主要好处在于它们可以包含使用 Transact-SQL
代码的复杂处理逻辑。因此,触发器可以支持约束的所有功能;但它在所给出的功能上并不总是最好的方法。实体完整性总应在最低级别上通过索引进行强制,这些索引或是 PRIMARY KEY
和 UNIQUE
约束的一部分,或是在约束之外独立创建的。假设功能可以满足应用程序的功能需求,域完整性应通过 CHECK
约束进行强制,而引用完整性 (RI)
则应通过 FOREIGN KEY
约束进行强制。在约束所支持的功能无法满足应用程序的功能要求时,触发器就极为有用。
触发器功能强大,轻松可靠地实现许多复杂的功能,为什么又要慎用呢。触发器本身没有过错,但由于我们的滥用会造成数据库及应用程序的维护困难。在数据库操作中,我们可以通过关系、触发器、存储过程、应用程序等来实现数据操作……
同时规则、约束、缺省值也是保证数据完整性的重要保障。如果我们对触发器过分的依赖,势必影响数据库的结构,同时增加了维护的复杂程序。
触发器功能:
1
、 允许/
限制对表的修改
2
、 自动生成派生列,比如自增字段
3
、 强制数据一致性
4
、 提供审计和日志记录
5
、 防止无效的事务处理
6
、 启用复杂的业务逻辑
触发器类型:
1、
语句触发器
要将触发器声明为语句级触发器,可以使用 FOR EACH STATEMENT
子句或忽略 FOR EACH
子句。
2
、 行触发器
要将触发器声明为行级触发器,请使用 FOR EACH ROW
子句
3
、 INSTEAD OF
触发器
4
、 系统条件触发器
5
、 用户事件触发器
1
、 语句触发器
是在表上或者某些情况下的视图上执行的特定语句或者语句组上的触发器。能够与INSERT
、UPDATE
、DELETE
或者组合上进行关联。但是无论使用什么样的组合,各个语句触发器都只会针对指定语句激活一次。比如,无论update
多少行,也只会调用一次update
语句触发器。
触发器的组成部分:
1
、 触发器名称
create trigger biufer_employees_department_id
命名习惯:
biufer
(before insert update for each row
)
employees
表名
department_id
列名
2
、 触发语句
比如:
表或视图上的DML
语句(增加、删除、修改)
DDL
语句(create,alter
和drop
)
数据库关闭或启动(startup shutdown
)
3
、 触发器限制
限制不是必须的。
4
、 触发操作
是触发器的主体,有一个begin ..end
块组成
下面是一个简单的例子:
CREATE TRIGGER TEST_TRIGGER
AFTER DELETE ON TEST
REFERENCING OLD AS newrow
FOR EACH ROW
BEGIN ATOMIC
insert into test values(newrow.User_Name ,newrow.city);
END@
test中有name和city两个字段,当每次删除一条记录时就会触发上面的触发器,将删除的这行又插入到了test表中,所以test表不会被删除。
关于触发器的其他例子
1
、需要对在表上进行DML
操作的用户进行安全检查,看是否具有合适的特权
2
、对修改表的时间、人物进行日志记录。
分享到:
相关推荐
本实验的主题围绕着“Multisim仿真实验三 触发器”,主要关注触发器的逻辑功能、触发器之间的转换以及如何利用JK触发器构建双向时钟脉冲电路。下面我们将详细探讨这些知识点。 首先,触发器是数字电路中的基本存储...
本文实例讲述了mysql触发器之创建多个触发器操作。分享给大家供大家参考,具体如下: 这次记录的内容mysql 版本必须得是5.7.2+的哈,之前的会不好使的。废话不多说,咱们开始正文哈。 在mysql 5.7.2+版本之前,我们...
RS触发器和SR触发器是数字电路中常见的基本逻辑门,它们都是利用电子开关实现的信号存储电路,但它们之间存在一些基本的差异。理解这两者的区别,对于学习数字逻辑电路设计和分析是非常重要的。 RS触发器,全称为...
在"触发器9.18触发器9.18触发器9.18触发器触发器9.18触发器9.18触发器9.18触发器"这个描述中,可能是在强调某个特定的事件或者场景,例如9月18日的数据库维护或者某个特定的触发器测试。 在大多数关系型数据库系统...
MySQL触发器是数据库管理系统提供的一种机制,用于在特定的数据操作(如INSERT、UPDATE、DELETE)发生之前或之后自动执行预定义的SQL语句。这些触发器可以用来实现复杂的业务规则,确保数据的一致性和完整性,或者...
JK触发器是一种广泛应用于数字电路设计中的基本单元,具有较强的通用性和稳定性。JK触发器的波形图绘制是理解其工作原理的关键步骤,尤其是在分析主从JK触发器的行为时。主从JK触发器由两个独立的JK触发器组成,一个...
在数字电路领域,触发器和逻辑电路是构建复杂数字系统的基础。触发器,特别是RS触发器和门控触发器,是时序逻辑电路的核心,它们能够记忆电路的状态,并根据输入信号的变化来更新这个状态。 1. **触发器**: - **...
### SqlServer触发器调用WebService知识点详解 #### 一、SqlServer触发器简介 在了解如何通过Sql Server触发器调用WebService之前,我们首先需要对触发器有一个基本的认识。触发器是一种特殊的存储过程,它被定义...
在这个实验报告中,我们关注的是不同类型的触发器,包括RS、D、JK、T触发器,以及如何利用它们实现分频电路。 1. **RS触发器**: RS触发器是一种基本的无稳态触发器,由两个与非门或或非门以正反馈方式构成。当R和...
触发器可以分为四种类型:DML触发器、DDL触发器、替代触发器和数据库事件触发器。 DML触发器是定义在表上的触发器,由DML事件引发。DML事件包括INSERT、UPDATE和DELETE三种。DML触发器可以在 BEFORE 或 AFTER 触发...
### 数据库实验6:触发器 #### 一、实验背景及目标 本次实验的主要目的是让学生深入理解并掌握数据库触发器的使用方法。触发器是一种特殊类型的存储过程,它被自动执行,当特定事件(如数据的插入、更新或删除)...
实验3主要探讨了四种类型的触发器:基本RS触发器、JK触发器、D触发器以及触发器间的相互转换。触发器作为基础的存储元件,其核心特性在于它们能维持两种稳定状态,代表二进制的0和1,并在特定条件下能够从一种状态...
实验报告“触发器分析应用”主要探讨了四种基本类型的触发器——RS触发器、JK触发器、D触发器以及地址寄存器,并通过VHDL描述和波形仿真进行了深入研究。以下是这些触发器的详细知识及应用: 1. RS触发器: RS...
RS触发器,全称为“Reset-Set触发器”,是数字逻辑电路中的一种基本逻辑单元,主要用于数据存储和状态保持。它的主要特点是可以根据输入信号RS(复位和置位)来改变其输出状态,通常有两个输入端:R(Reset)和S...
实验报告“数字电路集成触发器功能测试及转换”旨在深入理解和掌握数字电路中常见的几种触发器,包括RS、D、JK触发器以及三态触发器和锁存器的工作原理、功能测试方法和相互转换。实验由胡媛媛、郑三元等人编写,...
RS触发器,全称为Reset-Set触发器,是数字电子技术中一类基础的存储元件。它属于顺序逻辑电路,主要用于存储一位二进制信息,即逻辑“1”或“0”。在数字系统中,RS触发器可以用作基本的存储单元和各种时序逻辑电路...
MySQL中的触发器是一种数据库对象,它与特定的表相关联,并在对表执行INSERT、UPDATE或DELETE操作之前或之后自动执行预定义的SQL语句。触发器的主要作用是增强数据库的逻辑控制,确保数据完整性、记录操作日志以及...
### Multisim 数电仿真指导:D触发器及其应用 #### 实验背景及目标 本实验旨在通过使用Multisim软件进行数字电子技术的仿真,帮助学习者深入了解D触发器的功能及其在实际电路设计中的应用。实验的具体目标包括: ...
JK 触发器的 EDA 设计 JK 触发器是一种基本的数字电路触发器,广泛应用于数字电路设计中。JK 触发器的EDA设计是指使用hardware description language(HDL)编写JK触发器的数字电路模型,并使用电子设计自动化(EDA...
边沿D触发器是数字电路中的重要组成部分,尤其在时序逻辑电路中起到关键作用。它是一种双稳态电路,其状态更新仅发生在特定的时钟边沿,通常是上升沿或下降沿,这也是其被称为“边沿D触发器”的原因。这种特性使得它...