触发器的使用

触发器概述

触发器是一个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是当某一事件发生时触发,例如当表执行deletet insert update时就会被执行。触发器是用来维护表数据的完整性

触发器分为:

after触发器(之后触发)

instead of 触发器 (之前触发)

触发器里有两章特殊的表插入表(instered表)和删除表(deleted表),这两张是逻辑表也是虚表。有系统在内存中创建者两张表,不会存储在数据库中。而且两张表的都是只读的,只能读取数据而不能修改数据。这两张表的结果总是与被改触发器应用的表的结构相同。当触发器完成工作后,这两张表就会被删除。Inserted表的数据是插入或是修改后的数据,而deleted表的数据是更新前的或是删除的数据。

使用触发器的优点

使用触发器有如下优点:

自动执行。触发器在对表的数百据作了任何修改(比如手工输入或者应用程度序的操作)之后立即被**。
级联更新。触发器可以通过数据库中的相关表进行层叠更改,这比直接把问代码写在前台的做法更安全合理。
强化约束。触发器可以引用其它表中的列,能够实现答比CHECK约束更为复杂的约束。
跟踪变化。触发器可以阻止数据库中未经许可版的指定更新和变化。
强制业务逻辑。触发器可用于执行管权理任务,并强制影响数据库的复杂业务规则。

建立两个表及关系
触发器的使用触发器的使用触发器的使用
–新增
–go
–create trigger tri_add
–on books for insert
–as
– declare @typeid int
– select @typeid=TypeID from inserted --系统自带的表,保存新增的数据
–update BookTypes set nums=Nums+1 where [email protected]

–删除
–go
–create trigger tri_del
–on books for delete
–as
– declare @typeid int
– select @typeid=TypeID from deleted --系统自带的表,保存新增的数据
–update BookTypes set nums=Nums-1 where [email protected]

–修改
go
create trigger tri_upda
on books for update
as
declare @typeid int
declare @newTypeID int
select @typeid=TypeID from deleted
update BookTypes set Nums=Nums-1 where [email protected]
select @newTypeID=TypeID from inserted
update BookTypes set Nums=Nums+1 where [email protected]
update books set TypeID=2 where id=3