码迷,mamicode.com
首页 > 其他好文 > 详细

一触即发之触发器——【牛腩新闻发布系统】

时间:2015-02-03 19:39:29      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:触发器   约束   sql   


一、什么是触发器?


   触发器(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>


四、总结

  机遇之于人就像触发器的事件,前提是要时刻完善自身的触发器,这样才不会与机遇失之交臂。




一触即发之触发器——【牛腩新闻发布系统】

标签:触发器   约束   sql   

原文地址:http://blog.csdn.net/wangmei4968/article/details/43423703

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!