您的位置:首页 > 数据库

【SQL Server】-- 一触即发之触发器

2015-02-03 17:15 183 查看

一、什么是触发器?

   触发器(Trigger),顾名思义,一触即发。







 这里的触发指:调用某事件(如insert,delete,update)的时候执行触发器的操作,就像连锁反应一样。
 作用:保证数据完整性,加强数据的完整性约束和业务规则。说白了也就是保持数据一致性,不能同一字段在不同的数据表里面数据不一致。

二、触发器的优缺点?

好处:

  度娘如是说:在约束所支持的功能无法满足应用程序的功能要求时,触发器就极为有用。

  解读:约束此处应该指的是数据库完整性约束。约束,触发器,索引等都是为了保证数据的正确性和一致性而存在的。

   常见约束:唯一性(Unique)和主键约束(Primary key)、外键约束(Foreign key)、检查约束(Check)、空值约束(NOT Null)、默认值约束(Defult)。

  比如之前我们做过的《机房收费系统》,进行充值后,不仅仅要插入充值记录到充值表里面,还要更新学生的卡余额,通过上面的这些约束,无法做到同时更新两个表的数据,这就可以用到触发器。这样可以避免数据更新不同步造成的数据错误,不一致现象。

缺点:

  物极必反,凡事存在两面性。滥用触发器同样会给我们带来麻烦。比如影响数据库的结构,增加维护的复杂程度。

三、触发器常见的应用-级联删除

     学过《数据库系统原理》的同学都应该对主外键关系有所了解。如果一条SQL语句存在外键,想要删除该语句,就必须要先删除外键关联的表中对应的语句。比如牛腩里面的类别表(category)里面包含新闻表(news)的外键,新闻表(news)又包含评论表(comment)的外键,要想删除的时候要先根据新闻类别,找到该类别下的新闻,再找到新闻下的评论,先删除评论,然后是新闻,再是新闻类别,才能进行删除。

代码实例:

<span style="font-family:SimSun;"><span style="font-family:Microsoft YaHei;"><span style="font-family:SimSun;font-size:18px;">USE [newssystem]
GO
/****** Object:  Trigger [dbo].[trigCategoryDelete]    Script Date: 02/02/2015 23:22:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		王美
-- Create date: 2015年2月2日
-- Description:删除类别触发器
-- =============================================
ALTER TRIGGER [dbo].[trigCategoryDelete]
ON  [dbo].[category]
instead of  DELETE
AS
BEGIN
declare @caId int--定义id
select @caId=id  from deleted  --从删除的里面取出id

--删除评论
delete comment where newsId in(select newsId from news where caId=@caid )

--删除新闻
delete news where  caId =@caId --先删除类别下面的所有新闻
--删除类别
delete category where id =@caId --删除该类别

END
</span></span></span>


四、总结

  机遇之于人就像触发器的事件,前提是要时刻完善自身的触发器,这样才不会与机遇失之交臂。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: