牛腩新闻发布系统——触发器和存储过程的区别

  看了几集牛腩新闻发布系统的视频后,觉得那个老师是个纯屌丝,不过这样的屌丝气质还有说活的语调,很有意思的,虽然有种催眠的作用。

  屌丝老师讲解了触发器和存储过程的使用,机房重构的时候,个人用得最多的就是存储过程,翻看一些博客的时注意到了触发器这个字眼,跟着屌丝老师敲代码,顺着他的思路走,又理解了触发器使用。

触发器的作用

  触发器的主要作用是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。它能够对数据库中的相关表进行级联修改,强制比CHECK约束更复杂的数据完整性,并自定义操作消息,维护非规范化数据以及比较数据修改前后的状态。与CHECK约束不同,触发器可以引用其它表中的列。在下列情况下使用触发器实现复杂的引用完整性;强制数据间的完整性。创建多行触发器,当插入,更新、删除多行数据时,必须编写一个处理多行数据的触发器。执行级联更新或级联删除这样的动作。级联修改数据库中所有相关表。撤销或者回滚违反引用完整性的操作,防止非法修改数据。

删除新闻功能SQL语句集

触发器  

  解决外键导致的产出问题解决外键导致的产出问题删除是有讲究的,否则会滋生“斩草不除根”的后患,用触发器进行删除要达到的一个目的就是“皮之不存毛将焉附”,有种“连根拔起”的感觉。

<span style="font-size:18px;">-- =============================================
-- Author:	孙利楠
-- Create date: 2015-4-22 20:28
-- Description:	删除类触发器
-- =============================================
ALTER TRIGGER [dbo].[trigCategoryDelete]
   ON  [dbo].[category]
   --期初如下  
   --AFTER Delete
   --后来改成了下面这句代码,意思是触发器代替了对这张表的操作,代替删除语句
   instead of Delete
AS 
BEGIN	
	--先删除新闻下的评论,再删除类别下的新闻,最后删除类别,有种连根拔起的感觉
	declare @caId int 
	select @caId =id from deleted 
	--删除评论
	delete comment where newsId in(select newsId from news where caId=@caId )
	--由于新闻和评论是一对多的关系,所以删除的时候不能用=,而要用in
	--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 style="font-size:18px;">-- =============================================
-- Author:		孙利楠
-- Create date: 2015-4-24 20:10
-- Description:	删除新闻(连同其下新闻评论一起删除)
-- =============================================
ALTER PROCEDURE [dbo].[news_delete]
@id int		
AS
BEGIN
--先删除该新闻下的评论
delete comment where newsId =@id 
--再删除新闻本身
delete 	news where id=@id
END
</span>

触发器与存储过程的区别

  触发器与存储过程的主要区别在于触发器的运行方式。存储过程必须有用户、应用程序或者触发器来显示的调用并执行,而触发器是当特定时间出现的时候,自动执行或者激活的,与连接用数据库中的用户、或者应用程序无关。当一行被插入、更新或者删除时触发器才执行,同时还取决于触发器是怎样创建的,当UPDATE发生时使用一个更新触发器,当INSERT发生时使用一个插入触发器,当DELETE发生时使用一个删除触发器。

我对二者的理解

  由于对触发器的理解和使用还不是特别深刻,本菜鸟只能从功能和代码的角度对存储过程和触发器的区别进行理解:对触发器的理解就是环环相扣,个人看来,他和存储过程的区别就是存储过程是“牵一发而动全身”,是并发的,而触发器很像是操作系统概论中讲到的程序的顺序执行


你可能感兴趣的:(存储过程和触发器的区别)