存储过程与触发器

来源:互联网 发布:linux和openwrt 编辑:程序博客网 时间:2024/05/01 00:36

    在数据库学习阶段,自考《数据库系统原理》,中都接触到了触发器和存储过程。机房重构的时候,第一次真正的用到了 存储过程,减少了代码的用量,实现了多个表之间的操作。方便至极!在牛腩中,正式用了一次触发器,对触发器和存储过程都有了一定的了解。对比了一下他们!

触发器的再次认识

    触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程。触发器主要是通过事件进行触发被自动调用执行的。而存储过程可以通过存储过程的名称被调用。

触发器与存储过程的区别:

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

存储过程的调用

<span style="font-family:KaiTi_GB2312;font-size:24px;"><span style="white-space:pre"></span>///<summary>        ///根据类别ID取出该类别下的所有新闻        ///</summary>        ///<paramname="caid">类别ID</param>        ///<returns></returns>        publicDataTable SelectByCaId(string caid)        {            //TODO:根据类别ID取出该类别下的所有新闻            DataTable dt = new DataTable();            //需要传入参数            stringcmdText = "news_selectByCaId";            SqlParameter[] paras = newSqlParameter[]{              new SqlParameter("@caid",caid )           };           dt = sqlhelper.ExecuteQuery(cmdText, paras, CommandType.StoredProcedure);            returndt;        }</span>

    调用存储过程需要通过存储过程的名称来显示调用,例如,news_selectByCaId是一个存储过程,需要通过ExecuteQuery调用。

存储过程的调用

<span style="font-family:KaiTi_GB2312;font-size:24px;">ALTER TRIGGER [dbo].[trigCategoryDelete]   ON  [dbo].[category]   Instead of  DELETE    --用Begin后面的语句代替删除AS BEGINdeclare @caId int select @caId =id from deleted --删除评论--in 是多对多的时候delete comment where newsId in (select newsId from news where caId =@caId )delete news where caId=@caId--先删除news表delete category where id =@caId--再删除category表--select * from news --delete news where caId=(select id from deleted )END</span>

    trigCategoryDelete触发器中有一句instead of DELETE,表示当执行到删除操作的时候,就自动执行这句话,不需要用代码或者事件去调用。

总结

触发器是一种比较高级的完整性约束条件,用来解决用户定义的完整性不能解决的问题,提高数据库的完整性;存储过程是为了加快系统的执行效率和速度而创建的,建立存储过程后,客户机只需要用EXEC执行存储过程即可,不用执行冗长的数据库select代码。触发器存储过程可以说是非常相似,触发器可以说是一种变种的存储过程,触发器和存储过程一样都是SQL语句集,通常通过创建触发器来强制实现不同表中的逻辑相关数据的引用完整性和一致性。

感受

学习是一个反复的过程,每次学习都会有不一样的收获!


0 0
原创粉丝点击