触发器


先简单说说触发器的机制。每个触发器都会创建两个逻辑专用表:inserted表和deleted表,其结构跟被触发表的结构完全相同,执行后,这两个表都会被删除。执行insert插入语句时,inserted表存放要插入的所有行,执行delete删除操作时,deleted表存放要删除的所有行,执行update更新操作相当于先执行一个delete操作再执行有个insert操作,原记录存放于deleted表新记录存放于inserted表。

触发器分after触发器和instead of触发器两种。

After触发器也叫For触发器,它会在触发insert、update或delete动作之后执行,也即它只有在已插入一行或是多行和所有约束已被处理且通过后才触发,并且AFTER 触发器只能对表起作用。

instead of触发器代替触发动作进行激发,如果一个表上有一个instead of触发器并在这个表上执行update操作,则update语句不会改变这个表中的数据。INSTEAD OF 触发器可以同时对表和视图起作用。

AFTER 触发器多用在动作必须在表中数据发生改变之后才执行后情情况,比如,AFTER 触发器可以用于将对数据作任何变动的日志记录在一个相对独立的审计表中。INTEAD OF 触发器也能做同样的工作。但是 INSTEAD OF 触发器在这个情况下的效率比较低,因为更新动作只能在将它发生的动作准确地记录在审计表之后才允许执行。一般来说,只要不影响数据的修改,AFTER 触发器比 INSTEAD OF 触发器更有效率,但有时 INSTEAD OF会更好些。

理论是枯燥的,对于初学者而言也是难懂的,通过一些实例会更有利于理解和消化。

1、更新触发

create trigger updateUser

on allUser

after update

as

update partUser

set usr_Name=(select usr_Name from inserted), usr_Pwd=(select usr_pwd from inserted)

where usr_ID=(select usr_id from inserted)

 

 

2、不允许修改用户名

use 数据库名
go
create trigger tr
on 表名
for update
as
    if update(userName)
        rollback tran

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值