触发器的定义
触发器的种类以及使用
触发器的作用
触发器的定义
触发器是一种专用类型的存储过程,它被捆绑到SQL Server 的表格或者视图上。
触发器的种类
instead of 触发器
1用于执行一个替代操作来代替触发事件的操作,最终instead of 触发器的触发事件本身不会被执行,不像DML触发器那样,DML触发事件本身最终会被执行.
2instead of 触发器只能针对视图,不是视图所有列都支持。如果对列进行数学运算或函数运算,不能对该列进行DML操作,这时候可以使用instead of 触发器…
示例
go
create trigger tgr_deleteBookType on my_view
instead of delete
as
–定义变量,存储删除类型ID
declare @typeID int
select @typeID = id from deleted
–删除类型之前删除对应的书籍
delete from [dbo].[Books] where TypeID=@typeID
–删除书籍后再删除类型
delete from [dbo].[BookTypes] where id=@typeID
delete from [dbo].[BookTypes] where id=2
after 触发器
创建after触发器
after触发器是在对表进行操作之后触发的。创建新增触发器语句
–create trigger 触发器名称
– on 表名
– for 操作
–as 需要执行的sql语句
create trigger tgr_bookInsert
on [dbo].[Books]
for insert
as
–定义变量,存储新增书籍的类型ID
declare @typeID int
–定义变量存储书籍类型的数量
declare @typeNums int
–找到存储新增书籍的类型ID
select @typeID=typeID from inserted
–计算出对应书籍类型的数量
select @typeNums=count(*) from [dbo].[Books] where typeID=@typeID
–更新BookTypes表
update [dbo].[BookTypes] set Nums=@typeNums
触发器的作用
触发器是一个特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。