触发器的含义
触发器(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 [触发器名称] ;