1、what?
什么是触发器(trigger)?
前两篇介绍了存储过程,存储过程可以理解为sql语句集。那么触发器就是一种特殊的存储过程,也就是一群特殊的sql语句集。
特殊在哪?
从上文得知,存储过程是依赖名字才被调用的。不仅是存储过程,我们常用的方法等,大部分也是先知道名字,才能去使用。就像吃饭采用订外卖的形式,总要知道餐厅的名字才能下订单。
触发器被调用却不用依赖名字。
还是吃饭这个行为,天天订外卖,只有一家餐厅特别符合胃口,固定这家餐厅。一到吃饭时,就直接下单了。
触发器就是个固定餐厅的订单。它固定了一些数据库操作的行为,只要一触发事件,就能被驱动。
2、why?
为什么要用触发器?
数据库操作无非增删改查,触发器主要作用于Insert、Delete、Update(和Create、Drop、Alter:DDL语言,暂且不讲)。
当指定表发生此类操作时,自动激活(所以是事件驱动)。根据执行的操作不同,又可分为两类。
1)After触发器
当发生Insert、Delete、Update之后,该触发器执行封装好的操作。
2)Instead of触发器
当发生Insert、Delete、Update时,该触发器执行替代操作,不执行Insert、Delete、Update,而是执行封装好的操作。
3、how?
创建触发器示例:
CREATE TRIGGER trigCategoryDelete
ON Category
instead of DELETE --替代触发器
AS
BEGIN
---- 先删除该类别下的所有新闻,再删除该新闻类别
declare @id int
select @id = id from deleted
delete news where caId =@id
delete category where id = @id
END</span>