存储过程VS触发器

来源:互联网 发布:redis端口号 编辑:程序博客网 时间:2024/05/02 08:29

    在牛腩新闻发布系统中,由于建立了主外键使得在在删除的时候由于主外键的冲突导致删除无法进行,这时候牛腩老师讲到了触发器,记得自己在之前的机房重构中,在同时更新多余一张表的时候用到了存储过程,顿时觉得两者很相似。那么什么是触发器,什么是存储过程呢?

    l  触发器

    这是牛腩新闻发布系统中一张数据关系图,主外键关系一目了然。


    那么由于建立了主外键使得在在删除的时候由于主外键的冲突导致删除无法进行,这时候用到了触发器,那么什么是触发器呢?

    ²  定义

    触发器是一种特殊类型的存储过程,不由用户直接调用。创建触发器时会对其进行定义,以便在对特定表或列作特定类型的数据修改时执行。触发器分为三种:DML触发器、替代触发器、系统触发器。(这块刚刚接触,分类这块以后再写)

    ²  形式

    我们看一个例子,在牛腩新闻发布系统中,数据库中存在三种表,分别是category(类别表)、news(新闻表)以及comment(评论表)这三张表,我们知道一旦类别删除,那么其相应下面的新闻以及新闻下的评论也就不存在,这种删除为级联删除,触发器就能很好滴实现这个功能。

    ²  那么什么又是存储过程呢?

      Ø  定义

      存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。

      Ø  特点

      1、存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。

 

      2、由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中,所以存储过程运行要比单个的SQL语句块要快。同时由于在调用时只需用提供存储过程名和必要的参数信息,所以在一定程度上也可以减少网络流量、简单网络负担。

      Ø  存储过程的实例

    ²  那么存储过程和触发器的区别和联系又是什么呢?

    触发器是一种特殊的存储过程,

    相同点:

    1、都是sql语句集;

    2、同时实现对于多张表的操作;

    3、方便维护数据的完整和统一性;

    不相同的地方:

    1、触发器的主要作用是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。它能够对数据库中的相关表进行级联修改,强制比CHECK约束更复杂的数据完整性,并自定义操作消息,维护非规范化数据以及比较数据修改前后的状态。

    2、触发器不能用EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发(激活)执行。

    3、触发器不同于存储过程,触发器主要是通过事件执行触发而被执行的,而存储过程可以通过存储过程名称名字而直接调用。当对某一表进行诸如UPDATE、INSERT、DELETE这些操作时,SQLSERVER就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合这些SQL语句所定义的规则。

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

   ²  那么存储过程和函数又有什么联系呢?

    相同点是:两者都是可以传递参数。

    不同点:

    1、标识符不同。函数的标识符为FUNCTION,过程为:PROCEDURE。

    2、函数中有返回值,且必须返回,而过程没有返回值。

    3、过程无返回值类型,不能将结果直接赋值给变量;函数有返回值类型,调用时,除在select中,必须将返回值赋给变量。

    4、函数可以在select语句中直接使用,而过程不能,例如:假设已有函数fun_getAVG() 返回number类型绝对值。那么select fun_getAVG(col_a) from table 这样是可以的。

    函数,存储过程以及触发器既有区别又有联系。正是这些他们的存在方便着我们的应用和学习。触发器以及存储过程的学习仍在继续,为自己加油~


0 0
原创粉丝点击