sql的存储过程与触发器的区别,以及各自的优缺点!

首先说存储过程吧:

存储过程:

是一组SQL语句集,从开头到结尾包含这许多的SQL语句,然后中间对于有需要的业务逻辑处理,进行逻辑控制。解决一些复杂的业务时比较实用。 比如说我在service层处理业务逻辑的虎,可能会涉及到多次数据库的连接。这就相当的耗费资源,但如果你用存储过程的话,就只有一次,从响应来说,时间上很有优势,而且性能也会提高,也就是说存储过程可以给我们带来运行效率提高的好处。 存储过程解决业务的逻辑,就相当于我们写java时一样的道理,如果我们过多在java写业务处理,势必需要经常连接数据库,如果将一些复杂的逻辑交给数据库去处理,就可以减少连接的次数。

触发器:

触发器与存储过程类似,里面也是一些SQL语句集,触发器可以控制表与表之间的数据同步更新,删除等操作。比如我们给一张学生表写一个触发器,当插入一条记录的时候,同时也向成绩表插入一条记录。触发器可以分为操作前执行或者操作后执行。关键字是before与after。  for  each  row 语句 是铺抓每一条都会触 发,就算是批操作,也会一条条的触 发。不加,就是一次的触发,如果是批操作,就只会触发一次。当然也可以使用控制逻辑语句,进行筛选触发,比如

 BEGIN

     IF (new.name = ‘demo’) THEN
         insert into tab2(tab2_id) values(new.tab1_id);

END;

判断插入的值,然后再执行触发器的操作。

优点:

存储过程只要编译一次,就可以永久使用,可以复用。比一般的sql执行快。可以提高运行速度,但是对于简单的SQL执行,存储就没有什么明显优势。可以减少网络流量,当我们需要一次执行上百条SQL时,而存储过程只需使用一条执行语句调用即可,可以减少网络流量。

触发器:(转载)

1.自动执行:触发器不用像存储过程一样需要手动调用,是自动触发的,只有当对表进行更新,删除等操作的时候会立即触发。

2.级联更新:触发器可以通过数据库中的相关表进行层叠更改,这比直接将代码写在前端的做法更安全合理。

3强化约束:触发器可以引用其他表的列,能够实现比check约束更为复杂的约束。

4跟踪变化:触发器可以阻止数据库中未经允许的指定更新和变化。

5强制业务逻辑:触发器可用于执行管理任务,并强制影响数据库的复杂业务规则。

 

缺点:(参考之存储过程的优缺点)

不同数据库,语法差别很大,移植困难,换了数据库,需要重新编写;

不好管理,把过多业务逻辑写在存储过程不好维护,不利于分层管理,容易混乱,一般存储过程适用于个别对性能要求较高的业务,其它的必要性不是很大;

触发器要用的恰到好处,一个大型应用里,触发器越少越好,触发器会使编程时源码的结构被迫打乱,为将来的程序修改、源码阅读带来很大不便。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值