前触发器是什么意思?

如题所述

第1个回答  2022-10-23
什么是触发器
触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。SQL3的触发器是一个能由系统自动执行对数据库修改的语句。

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

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

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

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

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

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

*/

-- 触发器的特点

/*

与表相关联

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

自动激活触发器

当对表中的数据执行 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

-- 触发器的使用

/*

......
触发器的特性方程是什么意思啊 看不懂啊 比如 Qn=Qn ̄S+ ̄R 这里的Q表示触发前触发器的状态 50分
不太行吧,,,,
什么是触发器
SQL触发器实例1定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。

常见的触发器有三种:分别应用于Insert , Update , Delete 事件。

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

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 tr......
什么是触发器,使用触发器的好处是什么
触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由个事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。

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

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

创建触发器的SQL语法

DELIMITER |

CREATE TRIGGER ` `.` `

< [ BEFORE | AFTER ] > < [ INSERT | UPDATE | DELETE ] >

ON

FOR EACH ROW

BEGIN

--do something

END |

触发器的优点

触发器可通过数据库中的相关表实现级联更改;不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以强制比用 CHECK 约束定义的约束更为复杂的约束。与 CHECK 约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。一个表中的多个同类触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同的对策以响应同一个修改语句。

比较触发器与约束

约束和触发器在特殊情况下各有优势。触发器的主要好处在于它们可以包含使用 Transact-SQL 代码的复杂处理逻辑。因此,触发器可以支持约束的所有功能;但它在所给出的功能上并不总是最好的方法。实体完整性总应在最低级别上通过索引进行强制,这些索引或是 PRIMARY KEY 和 UNIQUE 约束的一部分,或是在约束之外独立创建的。假设功能可以满足应用程序的功能需求,域完整性应通过 CHECK 约束进行强制,而引用完整性 (RI) 则应通过 FOREIGN KEY 约束进行强制。在约束所支持的功能无法满足应用程序的功能要求时,触发器就极为有用。

例如:除非 REFERENCES 子句定义了级联引用操作,否则 FOREIGN KEY 约束只能以与另一列中的值完全匹配的值来验证列值。

CHECK 约束只能根据逻辑表达式或同一表中的另一列来验证列值。如果应用程序要求根据另一个表中的列验证列值,则必须使用触发器。

约束只能通过标准的系统错误信息传递错误信息。如果应用程序要求使用(或能从中获益)自定义信息和较为复杂的错误处理,则必须使用触发器。

触发器可通过数据库中的相关表实现级联更改;不过,通过级联引用完整性约束可以更有效地执行这些更改。

触发器可以禁止或回滚违反引用完整性的更改,从而取消所尝试的数据修改。当更改外键且新值与主键不匹配时,此类触发器就可能发生作用。例如,可以在 titleauthor.title_id ......
触发器分为事前触发和事后触发,这两种触发有何区别
我看ORALCE,然后是这样理解的,

例如对一个表进行插入insert操作,在插入时触发一个触发器,如果是

事前触发:“before insert on 表名”,则可以在未插入前,对想插入的那一行“insert into 表名 values(a,b,c)”里的a,b,c进行操作,

例如把a换成f,“:new.a :=f ”,

":new"是插入前临时内存(用于insert update),保存著insert的记录,“:new.a”就引用了临时记录的a,“:new.a :=f ”就是把f放进这个a里面,然后才执行临时内存写入表,这时实际插入到表的是(f,b,c)了。

事后触发:因为有时有两个表是相关联的,如果你删除了第一个表,第二个表的某写记录的找不到关联,就变得没意义了,所以为了实现事务的完整性,在删除第一表的某记录后,还要同时删除第二个表的对应记录,这时就用到事后触发了“after delete on 表1”,在对表1进行删除操作时“delete from 表1 where 表1.id='001';”,

同时删除表2的记录"delete from 表2 where 表2.id=:old.id",

":old"是操作后临时内存(用于delete,update),它保存了进行删除操作后的记录,这里相当于删除表2中“表1.id=表2.id”的记录。

一楼朋友说的事后触发不能撤消好象不对的,事后触发就是为了保证事务的完整性,只要rollback回滚操作,表1和表2的删除操作都会被撤消的。
什么是触发器?起到什么作用?
触发器是事件编辑器的精髓所在,游戏中多样的任务、不同的事件、胜利/失败的条件、天气的变化等等这些全部都是触发器的功劳。 触发器由三个部分组成,事件、条件、动作。 事件:或称为触发事件,顾名思义,就是当某个事件发生的时候就运行触发器。 条件:判断是否达到指定的条件,如果没有达到条件将不执行动作。可以留空,表示直接执行动作。一般来说,条件越多越容易出错,所以尽量只使用一两个条件。 动作:条件通过后所要做的事情。 我用个简单例子来说明,比如一个英雄进入地区后游戏胜利,那么就要这样设置。 事件:一个单位进入地区

条件:判断单位是一个英雄为Turn

动作:游戏胜利。 在每个新建地图中都会有个叫做初始化的类,其中有个叫做对战初始化的触发器,它设定了每张地图默认的初始设置,其中包括:

Use melee time of day (for all players) - 启用默认的游戏中开始时间。

Limits Heros to 1 per Hero-type (for all players) - 限制玩家同一种英雄只能生产一名。

Hero trained Heroes a Scroll of Town Portal (for all players) - 给英雄一个传送卷轴。

Set starting resources (for all players) - 设置起始资源,给每个玩家分配一开始拥有的资源。

Remove creeps and critters from used start locations (for all players) - 移除开始点附近的野生单位、障碍物等。

Create starting units (for all players) - 在开始点上创建玩家开始对战游戏需要的主基地和工人

Run melee AI scripts - 让所有计算机玩家执行对战游戏人工智能。

Enforce victory/defeat conditions - 使用默认的胜利失败条件,所有建筑物被破坏即失败。 如果不需要,删除掉它们就可以了,事实上大部分RPG地图都不需要这些条件。 触发器的所有指令都是英文的,不过没关系,我专门为此制作了一个中英对照表,并在其中做了简要说明。请参阅附录:触发器中英对照表。 除此之外,触发器中还有很多函数,例如:"Last Created Unit",最后创建的单位。合理运用这些函数也是非常重要的,在触发器的使用中将会大量使用到这些函数。 触发器的使用是千变万化的,本章我介绍一些常见的例子,希望你能够举一反三,了解触发器的使用。 注意:类可以用中文命名,注释也可以用中文命名,但触发器不能用中文命名!
触发器是什么意思?在电工里起什么作用?
又称“双稳态多谐振荡器”。触发器(Flip Flop)是一种可以存储电路状态的电子元件。最简单的是由两个或非门,两个输入端和两个输出端组成的RS触发器(见图)。复杂一些的有带时钟(CLK)段和D(Data)端,在CLK端为高电平时跟随D端状态,而在CLK端变为低电平的瞬间锁存信号的D触发器。更常用的是两个简单D触发器级联而成的在时钟下跳沿所存信号的边缘D触发器,广泛应用于计数器、运算器、存储器等电子部件。 照 明 配 件:用于高强度气体放电灯(H.I.D)的启动,型号繁多.由于高强度气体放电灯启动时需要一个高电压来使气体电离进入等离子态,因而需要一个高压发生器做为启动器。这就是触发器早期的机械型触发器已经淘汰。现在绝大多数触发器都是使用可控硅或高压触发二极管的电子触发器,常用的型号有:OSRAM 的 CD-7 飞利浦的 SI51 SN58 爱伦的ALK400等

在外加信号触发下能转换工作状态的电路。通常用触发器的输出端电压表明其工作状态。触发器分为两类。一类称为双稳态触发器,它有两个稳定的工作状态。在外加信号触发下电路可从一种稳定的工作状态转换到另一种稳定的工作状态。另一类称为单稳态触发器,它有一个稳定的工作状态和一个暂时稳定的工作状态。无外加信号触发时触发器处于稳定的工作状态,在受外加信号触发后触发器从稳定的工作状态转换到暂时稳定的工作状态,经过短暂时间后,自动返回到原来的稳定工作状态。 触发器   双稳态触发器  基本电路如图1的上半部。它由两个反相器直接耦合而成。反相器1由晶体管T1和电阻Rc1R11及R12组成,反相器2由晶体管T2和电阻Rc2、R21及R22组成。反相器1的输出端Q即是反相器2的输入端,同样,反相器2的输出端悩也是反相器1的输入端,两级反相器是互相反馈的。这个电路具有两种稳定状态:一种稳态是T1管导通、T2管截止,Q端为低电位、悩为高电位;另一种稳态是T1管截止、T2管导通,Q端为高电位、悩端为低电位。加上电压 Ec和-Eb后电路即进入一种稳定状态。若不加触发信号,电路则永远处于这个稳定状态。

欲使电路从一种稳态转换到另一种稳态,必须外加触发信号。图1的下半部分是两个引导触发信号给各个反相器的电路。它们分别由微分电路R1C1、R2C2和隔离二极管D1、D2组成。

当外加负触发脉冲作用于引导电路的“S”端时,通过微分电路R1C1使D1导通,b1点呈低电位。此时不论触发器原处何种状态T1管截止,Q点变为高电位,T2管导通,悩点变为低电位。这种稳态称为触发器的“置位”状态,“S”端称为“置位”端。反之,外加负触发脉冲作用于“R”端时,则使悩端为高电位,Q端为低电位。这种稳态为触发器的“复位”状态,“R”端称为“复位”端。具有置位、复位功能的触发器称为R-S触发器。

双稳态触发器可用来构成各种计数器、分频器和寄存器等。

射极耦合触发器  又称施密特触发器,其原理电路如图2。它也由两级反相器直接耦合而成。第一级反相器的输出端c1是第二级反相器的输入端。第一级反相器的输入端接输入触发电压ui,第二级反相器的输出端提供输出电压u0。两级反相器通过公共的发射极电阻Re耦合在一起,因而称射极耦合触发器。这种触发器也有两种稳定状态,一种稳态是T1管导通、T2管截止,输出u0为高电位;另一种稳态是T1管截止,T2管导通,u0为低电位。触发器的稳定状态决定于输入u电位的高低,因此这种触发器具有电位触发特性。当输入ui为低电位时,T1管截止,c1点电位升高,使T2管导通,输出u0也是低电位。当ui为高电位时,T1管导通......
触发器的作用是什么?
如果你删除一条数据等于牵连着另一条sql语句一同被执行。

举个你能懂的例子:

相当于在生活中你不小心踩了我一脚我随后做出的反应明白了吗?

当你插入一条sql语句的时候需要在其他表中做得处理,比如增加了这个表的数据你想同时增加两个表的数据就需要用到触发器,因为在界面写业务逻辑往往很复杂,还不如直接在sql里写好,所以这时最好用到的就是触发器了,懂了吧!
oracle触发器 前面的红叉是什么意思
触发器使用的表的结构发生过变化,需要重新编译一下,并不表示触发器一定有错误。
相似回答