4-2触发器

4-2触发器

tags:数据库

触发器是用户定义在关系表上的一类由时间驱动的特殊过程.一旦定义,触发器就将被保存在数据库服务器中,任何用户对表增,删,改操作均由服务器自动激活相应的触发器,在关系数据库管理系统的核心层进行集中控制.

定义触发器

触发器又叫做事件-条件-动作规则.当特定的系统事件发生时,对规则的条件进行检查,如果条件成立则执行规则中的动作,否则不执行该动作.
create trigger <触发器名> 每当触发时间发生时,该处发起被激活
{before|after}<触发事件>on<表名> 指明触发器激活时间
referencing new|old row as <变量> 指出引用的变量
for each{row|statement} 定义触发器的类型,指明动作体执行的频率 注意sql server无此功能
[when<触发事件>]<触发动作体> 当触发条件为真时执行触发动作体

触发器各部分语法说明

说明:
1. 只有表的拥有者才能在表上创建存储发起,并且一个表只能创建一定数量的触发器.
2. 触发器名,同一模式下触发器名必须唯一,并且触发器名和表名必须在同一模式下.
3. 表名,触发器只能定义在基本表上,不能定义在视图上.
4. 触发事件,insert delete update ,也可是这几个事件的组合如 insert or delete等
5. 触发器类型,触发器按照所触发动作间隔尺寸可分为行级触发器和语句级触发器.应该注意的是sql server 中无行级触发器需要使用游标进行对应操作.
6. 触发条件,触发器被激活时只有当触发条件为真时触发动作体才执行,如果省略when触发条件,则触发动作体在触发器激活后执行
7. 触发动作体,触发动作体既可以是一个匿名PL/SQL过程块,也可以是对已经创建存储过程的调用.如果是行级触发器,用户可以在过程体中使用NEW 和OLD 引用 update / insert 事件之后的新值和uppdate/delete事件之前的旧值;如果是语句级触发器,则不能在号出发动作体中使用NEW 或者 OLD

create trigger sc_t
after update of grade on sc
referencing
    oldrow as oldtuple
    newrow as newtuple
for each row
when (newtuple.grade >=1.1 * oldtuple.grade)
    insert into sc_u(sno,cno,oldgrade,newgrade)
    value(oldtuple.sno,oldtuple.cno,oldtuple.grade,newtuple.grade)

begin
    if(newtuple.job='教授')and(newtuple.sal<4000)
        then newtuple.sal:=4000
        end if
    end;
end;

在本例中referencing指出应用的变量,如果触发事件是update操作并且有for each row 子句,则可以使用的变量有oldrow和newrow,分别表示修改之前的元组和修改之后的元组.若没有for each row 子句,则可以应用的变量有oldtable 和newtable.

for each statement 语句级触发器,执行完insert语句后下面的触发动作体才执行一起

触发器的执行顺序

对于同一个表上的多个before触发器,遵循’谁先创建谁执行的原则’

sql server触发器

SQL Server为每个触发器都创建了两个专用表:Inserted表和Deleted表。这两个表由系统来维护﹐它们存在于内存中而不是在数据库中。这两个表的结构总是与被该触发器作用的表的结构相同。触发器执行 完成后﹐与该触发器相关的这两个表也被删除。
Deleted表存放由于执行Delete或Update语句而要从表中删除的所有行。
Inserted表存放由于执行Insert或Update语句而要向表中插入的所有行。
sql server没有行级触发器.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值