初识SQL触发器

在学习牛腩新闻发布系统的过程中,学习到了触发器,说到触发器,就让我想到了存储过程。实际上,触发器是一种特殊的存储过程。
触发器的主要功能是监视用户对数据的修改,如果针对一个数据表建立触发器,则当数据表被修改(插入、更新或删除)时,SQLsever便使触发器自动执行,以便对数据的修改采用一些适当的措施,从而保证数据的完整性和安全性。

触发器的分类

刚刚接触触发器,先来了解一下常用的几种触发器吧。

After触发器

After 触发器在触发操作(Insert、Update 或Delete)后和处理完任何约束后激发。可通过指定 After 或 for 关键字来请求 After 触发器。因为 For 关键字与 After 的效果相同,所以具有 For 关键字的触发器也归类为 After 触发器。
Instead Of 触发器代替触发动作进行激发,并在处理约束之前激发。
注意:对于每个触发操作(Update、Delete和Insert),每个表或视图只能有一个 Instead Of 触发器。而一个表对于每个触发操作可以有多个 After触发器。

Instead of触发器

INSTEAD OF触发器指定执行触发器而不是执行触发 的SQL 语句,从而替代触发语句的操作。
在表或视图上,每个 INSERT、UPDATE 或 DELETE 语句最多可以定义一个 INSTEAD OF 触发器。然而,可以在每个具有 INSTEAD OF 触发器的视图上定义视图。

举例:

拿牛腩新闻发布系统的触发器来说。

USE [newssystem]
GO
/****** Object:  Trigger [dbo].[trigCategoryDelete]    Script Date: 2019/1/12 21:00:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[trigCategoryDelete]                 --建立触发器的名称
    on [dbo].[category]                        		     --选择要建立触发器的表
    INSTEAD OF  delete       							 --触发条件 除了delete,插入/删除/更新(任选一个)
AS                                        				 --伴随
BEGIN    												 --开始执行
	--声明一个变量
	declare @caId int
	select @caId=id from deleted
	--删除评论
	delete comment where newsId in(select newsId from news where caId=@caId)
	--删除新闻
	delete news where caId=@caId
	--删除新闻类别
	delete category where id=@caId                      
END

写在最后

触发器虽然好用,但是要合理使用哦。小编就出现过因为触发器而导致的错误。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值