① sql中触发器怎样执行的
创建触发器 是特殊的存储过程,自动执行,一般不要有返回值。
1、后触发器 (AFTER,FOR)先执行对应语句,后执行触发器中的语句。
2、前触发器 并没有真正的执行触发语句(insert,update,delete),而是执行触发后的语句。
3、行级触发器 (FOR EACH ROW) 在SQL server 中不存在。
(1)触发器怎么停止数据库扩展阅读:
创建触发的语法
CREATE TRIGGER trigger_name --触发器名称
ON table_name --触发的表
[WITH ENCRYPTION]
FOR [DELETE, INSERT, UPDATE] --选择触发器类型
AS --触发后要做的语句
T-SQL语句
GO --结束标记
② SQL。。如何停用,删除一个数据库中所有的触发器
use 库名
go
alter *
from sysobjects
where type='TR'
go
--以上是显示当前库中所有的触发器--
use 库名
drop trigger test1
--根据表触发器名一个一个的删就行了,顺便说一下没有一下子全部删除的命令,祝你好运--
③ ORACLE触发器中如何终止SQL语句的执行
抛出异常,比如:
if new.col1 is null then
RAISE_APPLICATION_ERROR(-20001, 'col1 is null.');
end if;
④ 数据库中触发器的作用是什么
触发器是数据库提供给程序员和数据分析员来保证数据完整性的一种机制,它是一种与数据表事件相关的特殊的存储过程。触发器的执行不是由程序调用,也不需要手工开启,而是由数据表上的事件来触发,当用户对一个数据表进行增、删、改操作时就会激活它执行。
触发器可以查询其他表,而且可以包含复杂的SQL语句。它们主要用于强制服从复杂的业务规则或要求。触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。
触发器功能强大,可以轻松可靠地实现许多复杂的功能,但也不能过于依赖触发器,滥用触发器会造成关系数据库及应用程序维护困难,性能、效率低下等问题的产生,在实际问题中,要根据实际需要选择合适的解决方案。触发器是一种特殊的存储过程,在插入、删除、修改特定表中的数据时触发执行,拥有比数据库本身更强大的数据控制能力,其作用有以下四大方面。
1.数据安全数据安全主要是指对信息系统中的业务数据提供一种数据变更的审核机制,当其通过安全策略的审核后,允许用户变更相关数据,否则直接拒绝数据变更的请求。
安全原理:基于数据库的值使用户具有操作数据库的某种权利。
((1)可以基于时间限制用户的操作。例如,不允许下班后和节假日修改数据库数据。
(2)可以基于数据库中的数据限制用户的操作。例如,不允许股票价格的升幅一次超过10%。
2.数据审计数据审计主要是指对数据服务器上的记录进行变更时的一种用户权限的即时审查与用户行为的全方位记录,以便事后对数据变更过程的追溯,保证数据变更的合法性。
审计原理:跟踪用户对数据库的操作。
((1)审计用户操作数据库的语句。
(2)把用户对数据库的更新写入审计表。
3.数据约束数据约束是指对用户的操作行为将导致业务数据与实际情况相悖的行为进行检查约束,而不让其发生,从而保证数据的完整性与一致性。
约束原理:对用户操作与实际逻辑的约束检查。
((1)实现数据完整性检查和约束。例如,回退任何企图买进超过自己资金的货物。
(2)提供可变的缺省值。
4.数据连环更新数据连环更新是指当对数据进行更新操作时,将所有与此数据相关联的数据作联合的更新操作,以保证数据的完整性与一致性。
连环更新原理:对关联数据作联合更新操作。
((1)修改或删除时级联修改或删除其他表中与之匹配的行。
(2)修改或删除时把其他表中与之匹配的行设成NULL值。
(3)修改或删除时把其他表中与之匹配的行级联设成缺省值。
⑤ 在数据库里怎么使用触发器
触发器是一类特殊的存储过程,开发人员也可以定义、编写符合业务需求的触发器来维护数据的完整性。触发器的控制流程及控制语句与存储过程相同,但触发器与存储过程还是有相当大的差别,触发器的定义格式及开启方式与存储过程不同,作为数据管理员或编程人员,熟练掌握触发器的用法对维护、操作数据库非常重要。基本语法1.创建触发器语法格式创建语法:CREATETRIGGER+触发器名称+触发时间点+触发事件+ON+表名+FOREACHROWBEGIN…END其中,触发时间点:BEFORE或AFTER,指明是在触发事件之前还是之后执行。
触发事件:INSERT、UPDATE、DELETE事件。例如,以下语句创建一个名字叫upd_check的触发器,其在对account表作更新(UPDATE)操作之前(BEFORE)自动触发。
CREATETRIGGERupd_…END2.删除触发器语法格式DROPTRIGGER+触发器名称3.触发器案例用tab.sql脚本创建表环境,然后用下面语句创建触发器。当往tab1表添加记录后将触发此触发器,将此新记录同时插入tab2表中。
DELIMITER//DROPTRIGGERIFEXISTSt_afterinsert_on_tab1;CREATETRIGGERt_afterinsert_on_(tab2_id)values(new.tab1_id);END;//DELIMITER;当用下面语句往tab1表插入记录时,tab2表中同时也添加了同样的记录,如图tab1数据表
tab1数据表
tab2数据表
INSERTINTOtab1(tab1_id)values(')
tab.sql
⑥ oracle 触发器中如何中止当前的SQL语句
在代码中加入 pause; 就可以中止当前的SQl,另外你还可以将当前需要的资料显示出来。 便于查询错误。
⑦ 如何使数据库中所有触发器失效或者全部关闭
use 库名 go alter * from sysobjects where type='TR' go --以上是显示当前库中所有的触发器-- use 库名 drop trigger test1 --根据表触发器名一个一个的删就行了,顺便说一下没有一下子全部删除的命令
⑧ 数据库问题之触发器
instead of 执行前触发器,一般叫替代触发器
在用户执行数据操作数据之前,触发器触发,执行触发器代码,不执行用户的操作
根据这个特性,
1>instead of 触发器可以为视图添加数据操作的功能
如:
表:
表1(ID,NAME) 表2(ID,DATE)
视图 :
DATA(表1.ID,表1.NAME,表2.DATE)
为DATA视图添加insert操作:代码如下
create triger trgName
on DATA
instead of insert
as
begin
insert into 表1 select ID,NAME from inserted
insert into 表2 select ID,DATE from inserted
end
2>可以根据情况进行数据操纵(insert的作用)
如:我们需要只有5月份才可以操纵数据,其他月份都禁止操纵
使用instead of触发器可以避免,插入了数据又删除的,无效劳动,浪费不必要的系统资源
3>可以根据条件判断数据的合法性,在执行或否决执行(update的作用),没有必要执行之后再进行回滚
4>可以防止表中数据,或一定条件的数据被删除(delete的作用),没有必要删除了在重新写入表
总的来说,我用一张简单的图来说明下,如:
(A用户的DML操纵,B为实际的DML操纵,C为触发器及其代码)
图1:for after 触发器
A↓
B↓
C↓
结束
图2:instead of触发器
A↓
C↓
结束
所以instead of触发器必须要进行实质的DML操纵
⑨ 数据库的触发器怎么进行高级操作
1.new与old在数据库的触发器中经常会用到更新前的值和更新后的值,所以掌握new和old的语法很重要。
old:表示操作执行前的数据行。
new:表示操作执行后的数据行。
一User数据表如图User数据表所示,若执行以下更新操作语句:updateUsersetscore=80whereuser_id=1
User数据表
则在此操作中,old表示未执行update语句前user_id=1这行记录;而new表示执行update语句后user_id=1这行记录。
从上面的表述中可知,new与old均表示某一行记录,old所表示的是写操作发生前的这一行旧数据,new则表示写操作发生后的这一行新的数据。正因如此,可以把new与old看作面向对象编程里面的一个对象或实例,与面向对象的方式类似,可用new.字段名或old.字段名的方式进行存取值。
old.字段名:表示未执行操作前的该行对应的某字段值。
new.字段名:表示执行操作后的该行对应的某字段值。
在上面User表的update操作中:old.score=60,表示update操作前score字段的旧值是60。
new.score=80,表示update操作后score字段的新值是80。
如果要使用new语句进行赋值,只能在before类型的触发器中使用,不能在after类型的触发器中使用。
更新操作前使用before先赋值,再插入数据库中。如以下语句是正确的:.金额=0;END更新操作后,不能在after中用new赋值,因为操作已经结束,只能读取内容。如以下语句是错误的:.金额=0;ENDnew与old的区别:前者可在before触发器中赋值、取值,也可在after触发器中取值;
后者只能用于取值,因为赋值没有意义。
注意:INSERT语句,只有new合法;
DELETE语句,只有old才合法;
UPDATE语句,可以同时使用new和old。
2.before与afterbefore与after表示触发器触发的时间点是在写操作开始之前,还是在写操作完成后,正因为它们有时间点先后的问题,因此它们的功能与使用场合有非常大的差别。
(1)before((1)先完成触发操作,再执行业务数据的增删改。
(2)触发的语句先于监视的业务语句。
(3)有机会影响即将发生的操作。
2)after((1)先完成业务数据的增删改,再触发。
(2)触发的语句晚于监视的业务语句。
(3)无法影响前面的增删改动作。
3.异常处理MySQL现有版本中不支持自定义异常,当某处需要抛出异常时,可抛出一个系统异常(类似运行异常)。如故意往不存在的表中插入数据等方式来触发系统异常的抛出,当异常抛出时,本次正在执行的所有操作会终止执行,并回滚所有数据到操作发生前的状态。
在触发器中,需要抛出异常的场景有很多,以下两个方面较为普遍:((1)新进来的数据不符合业务逻辑。
例如,①仓库最大商品库存数为10,订单要求一次性购买数量20。
②银行账户上只有50元,想要支付100元的账单。
(2)权限不足,不允许操作。
例如,①普通用户通过非法途径操作核心资源表。
②在非工作日修改业务数据。4.触发器案例用mytab.sql脚本创建表环境,然后用下面语句创建触发器。当往mytab表添加记录时,触发器中将抛出异常,导致所有操作终止,并回滚所有操作的数据。
DELIMITER//DROPTRIGGERIFEXISTSt_exception_trigger;CREATETRIGGERt_exception_--tab3表不存在
⑩ sql server 2008怎么停止触发器
-- 查看数据库已有触发器 use yourdatabase go select * from sysobjects where xtype='TR' -- 查看单个触发器 exec sp_helptext '触发器名' --删除触发器: 基本语句如下: drop trigger trigger_name