触发器
触发器是一种专用类型的存储过程,它被捆绑到SQL Server 的表格或者视图上。触发器包括两种,一种是instead of触发器(之前触发),另一种是after触发器(之后触发)。
触发器是一个特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。
触发器的使用需要用到两张表,一张是inserted表(保存新插入的数据),一张是deleted表(保存删除后的数据)。
首先创建两个测试表格
Books表:
ID | Name | BookTypeID | Remark |
---|---|---|---|
1 | 水浒传 | 1 | 无 |
2 | JavaScript | 2 | 无 |
3 | 斗罗大陆 | 3 | 无 |
BookTypes表:
ID | Name | Nums | Remark |
---|---|---|---|
1 | 文学类 | 1 | 无 |
2 | 学习类 | 1 | 无 |
3 | 小说类 | 1 | 无 |
1.after触发器
需求:在添加书本的时候,对应书本类型数量增加
创建触发器语法
create trigger --创建触发器
trigger_Name --触发器名称
on Table_Name --表名
aftert insert --进行之后操作
as
--sql语句
-----------------------------------
create trigger trigger_Name on books for insert
as
declare @typeID int --定义一个类型ID
select @typeID=BookTypeID from inserted --接收新增数据的booktypeID
update BookType set Nums = Nums + 1 where id = @typeID --更新BookType表的Nums数量
在此执行以下代码
Books表插入一条数据
insert Books values ('西游记',1,'无')
执行之前
执行之后文学类的书籍数量增加了1
2.instead of触发器
需求:在删除书本类别的时候,对应书本类型的书自动删除
创建触发器语法
create trigger --创建触发器
trigger_Name --触发器名称
on Table_Name --表名
instead of delete--进行之后操作
as
--sql语句
-----------------------------------
create trigger trigger_Name on bookTypes instead of delete
as
declare @typeID int --定义一个类型ID
select @typeID=ID from delete --接收删除书本类型的ID
delete Books where BookTypeID = @typeID --删除Books表的对应类型的书本
在此执行以下代码
Books表插入一条数据
delete BookTypes where Name = '文学类'
执行之前
执行之后文学类删除,对应的书本也删除