关于after和instead of触发器

触发器的含义

触发器(trigger)是一个特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。比如当对一个表进行操作( insert,delete, update)时就会激活它执行。

所用表与关系

两张表的主键ID自增,BookTypes表的ID与Books表的TypeID建立关系

在这里插入图片描述
在这里插入图片描述

AFTER 触发器

Insert

当数据库中的表中数据变化,包含 Insert、Update、Delete的任意操作时,如果
我们对该表写了DML触发器语句,那么该触发器就会启动。示例如下:
go
create trigger tri_adda  
on Books for insert 
as
//修改分类表的库存
	declare @typeID int //获取分类的ID
	select @typeID=TypeID from inserted
	//存储新数据select * from inserted
	//存储旧数据select * from deleted
	update BookTypes set Nums=Nums+1 where ID=@typeID
	print '新增成功!'

Update

当数据库中的表中数据变化,包含 Insert、Update、Delete的任意操作时,如果
我们对该表写了DML触发器语句,那么该触发器就会启动。示例如下:
go
create trigger type_update
on Books for update
as
//修改分类表的库存
	declare @newID int,@oldID int
	select @newID=TypeID from inserted //获取更新后的数据
	select @oldID=TypeID from deleted  //获取更新前的数据
	update BookTypes set Nums=Nums+1 where ID=@newID
	update BookTypes set Nums=Nums-1 where ID=@oldID
	print '修改成功!'

Delete

当数据库中的表中数据变化,包含 Insert、Update、Delete的任意操作时,如果
我们对该表写了DML触发器语句,那么该触发器就会启动。示例如下:
go	
create trigger tri_delete
on Books for delete
as
//修改分类表的库存
	declare @typeID int //获取分类ID
	select @typeID=TypeID from deleted
	update BookTypes set Nums=Nums-1 where ID=@typeID
	print '删除成功!'

INSTEAD OF 触发器

该触发器只是数据库的“导火线”,触发器是否能执行到想要的结果,需要由触发
器中的逻辑进行判断,因为该触发器往往伴随着很多的判断分支。
instead-of触发器创建语法
CREATE [OR REPLACE] TRIGGER 触发器名称
    INSTEAD OF [INSERT | UPDATE | UPDATE OF 列名称 
    [,列名称,...] | DELETE] ON 视图名称
    [FOR EACH ROW]
    [WHEN 触发条件]
    [DECLARE]
        [程序声明部分 ;]
    BEGIN
        程序代码部分 ;
    END [触发器名称] ;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值