1. 首页 > 科技 >

什么是触发器?触发器有什么作用?

什么是触发器 他的特点和用途是什么

触发器是指能够记忆一位二进制信号的基本逻辑单元电路 特点触发器的次态不仅与输入信号有状态有关 而且与触发器的现态有关 电路具有两个稳定的状态 仅供参考

什么是触发器?触发器有什么作用?什么是触发器?触发器有什么作用?


什么是触发器?触发器有什么作用?


触发器有什么作用?

一、触发器是一个具有记忆功能的,具有两个稳定状态的信息存储器件,是构成多种时序电路的最基本逻辑单元,也是数字逻辑电路中一种重要的单元电路。

在数字系统和计算机中有着广泛的应用。触发器具有两个稳定状态,即“0”和“1”,在一定的外界信号作用下,可以从一个稳定状态翻转到另一个稳定状态。

二、触发器的作用

1、可在写入数据表前,强制检验或转换数据。

2、触发器发生错误时,异动的结果会被撤销。

3、部分数据库管理系统可以针对数据定义语言(DDL)使用触发器,称为DDL触发器。

4、可依照特定的情况,替换异动的指令 (INSTEAD OF)。

扩展资料:触发器的优点

触发器可通过数据库中的相关表实现级联更改,不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以强制用比CHECK约束定义的约束更为复杂的约束。与 CHECK 约束不同,触发器可以引用其它表中的列。

例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它作,如修改数据或显示用户定义错误信息。触发器也可以评估数据修改前后的表状态,并根据其异采取对策。一个表中的多个同类触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同的对策以响应同一个修改语句。

参考资料:

触发器由门电路构成和门电路比较,功能上主要特点是什么?

所有触发器都由门电路构成

简单采用两与非门构成RS触发器RS触发器基础上改进得主从RS触发器进步改进得JK触发器而JK触发器稍作变化即得T触发器和D触发器等

d触发器的特点

D触发器是一个具有记忆功能的,具有两个稳定状态的信息存储器件,是构成多种时序电路的最基本逻辑单元,也是数字逻辑电路中一种重要的单元电路。

因此,D触发器在数字系统和计算机中有着广泛的应用。触发器具有两个稳定状态,即"0"和"1",在一定的外界信号作用下,可以从一个稳定状态翻转到另一个稳定状态。

D触发器有集成触发器和门电路组成的触发器。触发方式有电平触发和边沿触发两种,前者在CP(时钟脉冲)=1时即可触发,后者多在CP的前沿(正跳变01)触发。

D触发器的次态取决于触发前D端的状态,即次态=D。因此,它具有置0、置1两种功能。

对于边沿D触发器,由于在CP=1期间电路具有维持阻塞作用,所以在CP=1期间,D端的数据状态变化,不会影响触发器的输出状态。

D触发器应用很广,可用做数字信号的寄存,移位寄存,分频和波形发生器等等。

触发器,整流器的特性和作用是什么?

触发器,整流器的特性和作用是什么?

触发器的特性:它是能够记忆一位二进制数的基本逻辑单元电路,有0和1两个状态.在无合适的外界信号作用时,其状态不变.在有合适的外界信号作用时,其从一个状态转变成另一个状态,即0-1或1-0,记忆二进制信息0和1.

故,其作用就是存储二进制数.

整流器的特性:利用二极管的单向导电性将交流电转换成脉动直流电,实现这个转换的电路就称为整流器.

其作用就是将交流电转换成直流电

触发器什么时候使用?有什么功能?举个简单的例子说明一下。

定义: 何为触发器?在SQL 里面也就是对某一个表的一定的作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。

常见的触发器有三种:分别应用于Insert , Update , Delete 。(SQL 2000定义了新的触发器,这里不提)

我为什么要使用触发器?比如,这么两个表:

Create Table Student( --学生表

StudentID int primary key, --学号

....

)Create Table BorrowRecord( --学生借录表

BorrowRecord int identity(1,1), --流水号

StudentID int , --学号

BorrowDate datetime, --借出时间

ReturnDAte Datetime, --归还时间

...

)用到的功能有:

1.如果我更改了学生的学号,我希望他的借录仍然与这个学生相关(也就是同时更改借录表的学号);

2.如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借录。

等等。

这时候可以用到触发器。对于1,创建一个Update触发器:

Create Trigger truStudent

On Student --在Student表中创建触发器

for Update --为什么触发

As --触发后所要做的事情

if Update(StudentID)

begin

Update BorrowRecord

Set StudentID=i.StudentID

From BorrowRecord br , Deleted d ,Inserted i --Deleted和Inserted临时表

Where br.StudentID=d.StudentID

end

理解触发器里面的两个临时的表:Deleted , Inserted 。注意Deleted 与Inserted分别表示触发的表“旧的一条记录”和“新的一条记录”。 一个数据库系统中有两个虚拟表用于存储在表中记录改动的信息,分别是:

虚拟表Inserted 虚拟表Deleted在表记录新增时 存放新增的记录 不存储记录

修改时 存放用来更新的新记录 存放更新前的记录

删除时 不存储记录 存放被删除的记录

一个Update 的过程可以看作为:生成新的记录到Inserted表,旧的记录到Deleted表,然后删除Student记录并写入新纪录。

对于2,创建一个Delete触发器

Create trigger trdStudent

On Student

for Delete

As

Delete BorrowRecord

From BorrowRecord br , Delted d

Where br.StudentID=d.StudentID

从这两个例子我们可以看到了触发器的关键:A.2个临时的表;B.触发机制。

这里我们只讲解最简单的触发器。复杂的容后说明。

事实上,我不鼓励使用触发器。触发器的初始设计思想,已经被“级联”所替代

1.如果我更改了学生的学号,我希望他的借录仍然与这个学生相关(也就是同时更改借录表的学号);

2.如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借录。这时候可以用到触发器。

触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由来触发,比如当对一个表进行作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。

触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。 数据库领域名词 触发器可以查询其他表,而且可以包含复杂的 SQL 语句。它们主要用于强制服从复杂的业务规则或要求。例如:您可以根据客户当前的帐户状态,控制是否允许插入新订单。

触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。然而,强制引用完整性的方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。

触发器的功能是什么?

触发器(英语:Flip-flop, FF),大陆译作“触发器”、及译作“正反器”,是一种具有两种稳态的用于储存的组件,可记录二进制数字信号“1”和“0”。

触发器是一种双稳态多谐振荡器(bistable multivibrator)。该电路可以通过一个或多个施加在控制输入端的信号来改变自身的状态,并会有1个或2个输出。

触发器是构成时序逻辑电路以及各种复杂数字系统的基本逻辑单元。触发器和锁存器是在计算机、通讯和许多其他类型的系统中使用的数字电子系统的基本组成部分。

拓展资料:触发器的线路图由逻辑门组合而成,其结构均由SR锁存器派生而来(广义的触发器包括锁存器)。触发器可以处理输入、输出信号和时钟频率之间的相互影响。

这里的触发器特指flip-flop,flip-flop一词主要是指具有两个状态相互翻转,例如编程语言中使用flip-flop buffer(翻译作双缓冲)。

参考资料:wiki百科

什么是触发器?

触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,是一种特殊类型的存储过程,它是与表相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由来触发。

比如当对一个表进行作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。

触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。SQL3的触发器是一个能由系统自动执行对数据库修改的语句。

触发器与存储过程的区别是触发器不能执行EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发执行。

在Oracle中,触发器是一种特殊的存储过程,它在发生某种数据库时由Oracle系统自动触发发器,通常用于加强数据的完整性约束和业务规则等。

扩展资料:

触发器可通过数据库中的相关表实现级联更改,不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以强制比用CHECK约束定义的约束更为复杂的约束。与 CHECK 约束不同,触发器可以引用其它表中的列。

例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它作,如修改数据或显示用户定义错误信息。

参考资料:

触发器是一种特殊的存储过程,它在试图更改触发器所保护的数据时自动执行。

它被定义为在对表或视图发出 UPDATE、INSERT 或 DELETE 语句时自动执行,在有数据修改时自动强制执行其业务规则。

触发器可以扩展 SQL 约束、默认值和规则的完整性检查逻辑,但只要约束和默认值提供了全部所需的功能,就应使用约束和默认值。

/

-- 触发器的特点

/

与表相关联

触发器定义在特定的表上,这个表称为触发器表。

自动激活触发器

当对表中的数据执行 INSERT、UPDATE 或 DELETE 作时,如果对表上的这个特定作定义了触发器,该触发器自动执行,这是不可撤销的。

不能直接调用

与存储过程不同,触发器不能被直接调用,也不能传递或接受参数。

作为事务的一部分

触发器与激活触发器的语句一起做为对一个单一的事务来对待,可以从触发器中的任何位置回滚。

当使用触发器时,应该考虑以下事实和知道原则:

即使不存在显式的 BEGIN TRANSACTION 语句,在触发器的定义中也可以包括 ROLLBACK TRANSACTION 语句

如果遇到一个 ROLLBACK TRANSACTION 语句,则整个事务回滚。如果在触发器脚本中跟随在 ROLLBACK TRANSACTION 语句后还有别的语句,

这些语句将继续被执行。需要的话,可以使用 RETURN 语句来防止这些语句的执行。

如果包括 ROLLBACK TRANSACTION 语句的触发器在一个用户定义的事务中被激活,这个 ROLLBACK TRANSACTION 语句撤销整个事务。

在这个用户定义的事务的批处理语句中,激活该触发器的语句之后的语句将不再执行。

/

-- 举例

/

use Test

GO

create table dbo.t_record(idx int identity(1,1),col_1 varchar(20))

insert t_record (col_1) values ('Row 01')

insert t_record (col_1) values ('Row 02')

insert t_record (col_1) values ('Row 03')

/

create trigger tr_record_delete on dbo.t_record

for delete

as

/

作用:当删除表 t_record 中的记录时,若一次删除 1 条以上,则取消删除

/

if (select count() from deleted)>1

begin

raiserror('You cannot delete more than one record at a time',16,1)

rollback tran

end

Go

select from t_record

delete t_record

select from t_record

delete t_record where idx=1

-- 触发器的使用

/

触发器用于保持低级的数据完整性,而不是返回查询结果。

触发器的主要好处是可以包含负责的处理逻辑。

触发器能对数据库中相关的表进行级联修改,强制比 CHECK 约束更复杂的数据完整性。与 CHECK 约束不同,触发器可以引用其他表中的列。

定义自定义的错误信息。

维护非规范化数据。级联是指保持主键与外键之间的关系,非规范化数据是指派生的,冗余的数据值。

比较修改前后数据的状态。绝大多数触发器提供了访问由 INSERT、UPDATE 或 DELETE 语句引起的数据变化前后状态的能力。

这样,就允许在触发器中引用由修改语句所影响的行。

/

-- 使用触发器时的考虑

/

触发器是后反应的(Reactive),约束是前反应的(Proact)

在触发器定义的表中执行 DML 语句后,触发器执行。而约束是在 DML 语句执行前进行检查。

首先检查约束

如果在触发器表上存在约束,则约束在触发器之前进行检查。如果违反约束,触发器就不执行。

表对任何动作可以有多个触发器

允许在一个表上嵌套几个触发器。一个表可以定义多个触发器,每个触发器可以为一个或多个动作定义。

表的所有者能够指定和触发的触发器

当一个表上有多个触发器时,表的拥有者可以使用 sp_settriggerorder 系统存储过程来指定和激活的触发器。

其余的触发器的顺序不能被设置。

用户必须具有执行触发器定义的所有语句的权限

触发器创建者必须拥有在所有受影响的表上执行触发器所定义的所有语句的权限。

如果触发器中的任何部分的 T-SQL 语句的权限被拒绝,整个事务将被回滚。

表的属主不能在视图或临时表上创建 AFTER 触发器,但是触发器可以引用视图和临时表。

/

-- 8.2 --------------------------------------------------

-- 定义触发器

-- 创建触发器

-- 创建时须定义 触发器的名称、触发器所在的表、触发器所监视的动作

CREATE TRIGGER trigger_name

ON table_name

FOR INSERT|UPDATE|DELETE

AS

......

GO

/

模拟一个排队取号系统,当号码到达 50 之后,重新回到 1 开始计数。

即表中的 idx 到达 50 后,把表情空,把 IDENTITY 种子设置为 1 。

use Test

Go

create table t_queue(idx int identity(1,1),create_time datetime default(getdate()))

/

create trigger tr_reset_queue on t_queue

for insert

as

if @@identity>50

begin

truncate table t_queue

declare @now datetime

set @now=getdate()

insert t_queue (create_time) values (@now)

end

Go

declare @now datetime

set @now=getdate()

insert t_queue (create_time) values (@now)

select from t_queue order by idx desc

-- 修改触发器: 加密触发器、禁用触发器

-- 加密触发器

alter trigger tr_reset_queue on t_queue

with encryption

for insert

as

if @@identity>100

begin

truncate table t_queue

declare @now datetime

set @now=getdate()

insert t_queue (create_time) values (@now)

end

Go

sp_text tr_reset_queue

-- 禁用触发器

alter table t_queue

disable trigger tr_reset_queue

alter table t_queue

disable trigger all

-- 启用触发器

alter table t_queue

enable trigger tr_reset_queue

-- 删除触发器

-- 可以直接删除触发器,也可以通过删除触发器所在的表来删除触发器。

drop trigger tr_reset_queue

或者

drop table t_queue

-- 练习 --------------------------------------------------

-- 1 在 11 人制足球比赛中,球员在严重犯规后可被罚下场。

-- 但是当场上一个球队中的球员被罚到只剩 7 人时,无论再怎么犯规,都不能被罚下场。

/

use Test

Go

create table dbo.t_RealMadrid_On(Name varchar(50),Num tinyint,Position char(3))

insert t_RealMadrid_On values ('Casillas',1,'GK')

insert t_RealMadrid_On values ('Salgado',2,'RB')

insert t_RealMadrid_On values ('Samuel',19,'CBT')

insert t_RealMadrid_On values ('Pon',22,'CBT')

insert t_RealMadrid_On values ('Roberto Carlos',3,'LB')

insert t_RealMadrid_On values ('Figo',10,'RMF')

insert t_RealMadrid_On values ('Backham',23,'CMF')

insert t_RealMadrid_On values ('Ivan Helguera',6,'DMF')

insert t_RealMadrid_On values ('Zidane',5,'OMF')

insert t_RealMadrid_On values ('Ronaldo',9,'CF')

insert t_RealMadrid_On values ('Raul',7,'CF')

select from t_RealMadrid_On

/

-- --------------------------------------------------

-- 1

create trigger tr_player_delete

on t_RealMadrid_On

for delete

as

if (select count() from t_RealMadrid_On)<7

begin

rollback tran

raiserror('At Least 7 Players should Be On',16,1)

end

GO

delete t_RealMadrid_On where Num in (select max(Num) from t_RealMadrid_On)

select from t_RealMadrid_On

-- 2 使用触发器完成以下功能:当删除 t_Product 表时,检查 t_OrderHist

-- 中是否包含该产品的订购记录,如果没有,可以删除产品,否则回滚并报错。

use Test

Go

create table dbo.t_Product(p_id int,p_name varchar(50),stock int)

insert t_Product select 1,'SONY CD-R 52X',25

insert t_Product select 2,'SONY DVD+R 16X',0

insert t_Product select 3,'SONY DVD+R 8X',20

insert t_Product select 4,'MITSUBISHI DVD+R 16X',10

Go

create table dbo.t_OrderHist(o_id int,p_id int,quantity int,orderdate alldatetime default(getdate()))

insert t_OrderHist (o_id,p_id,quantity) select 10522,10,7

insert t_OrderHist (o_id,p_id,quantity) select 10523,2,9

insert t_OrderHist (o_id,p_id,quantity) select 10522,41,24

insert t_OrderHist (o_id,p_id,quantity) select 10522,7,5

GO

select from t_Product

select from t_OrderHist

create trigger tr_product_delete

on t_Product

for delete

as

declare @p_id int

select @p_id = p_id from deleted

if @p_id in (select p_id from t_OrderHist )

begin

raiserror('t_OrderHist中是否包含该产品的订购记录不允许删除',16,1)

rollback tran

end

GO

可以比照我们声控开关,当声音达到一定的程度,灯就会亮。数据库中的触发器就是当你执行了某一个动作比如insert,update,或delete某一个表,就会执行你定义好的sql语句。只是在数据库中,sql语句的执行也分before和after,而不像声控开关只是当声音到了之后才亮,触发器可以在你向某个表执行作前执行

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 12345678@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息