mysql触发器与存储过程

一、异同点

       触发器和存储过程都是一组mysql语句集,都可以实现一些比较复杂的业务逻辑,可以直接在数据库中,编写业务逻辑,对不同的表进行操作,执行效率较高,不同的是存储过程需要主动调用,如下:

#给参数赋值
set @b=5;
#调用存储过程,并传入参数
call proc_adder(2,@b,@s);
#获取结果
select @s as sum;
而触发器,的执行是在,我们对数据库进行操作时主动调用的,对b表执行插入操作之前,调用触发器如下:
create trigger a after insert  on  b 


二、缺点

      虽然触发器和存储过程可以加强代码的执行效率,但是把过多的业务逻辑存储于数据库中,不利于系统的运维管理,容易造成业务混乱,不利于系统的分成管理。

      不同的数据库下,语法差异较大,不利于数据库移植,移植工作量大。

三、存储过程

     1、简单创建存储过程

mysql触发器与存储过程

mysql触发器与存储过程

    2、创建代码如下


use cpyx;
#判断如果存在删除该触发器
DROP PROCEDURE IF EXISTS `proc_while`;
#触发器开始
DELIMITER ;;
#创建触发器,定义输入 输出,IN n int、OUT m int
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_while`(IN n int)
#开始逻辑编码
BEGIN
#定义变量 i s为int型
declare i int;
declare s int;
#初始化赋值
set i=1;
set s=0;
#while循环,判断临界条件
while i<=n do
#求和
set s=s+i;
set i=i+1;
#结束循环
end while;
#查询返回最终结果
select s;
#结束触发器
END;;
DELIMITER ;

3、查询与执行

use cpyx;
Show procedure status;

use cpyx;

CALL  proc_while(5)

三、触发器

 1、触发器的创建

mysql触发器与存储过程

2、详细代码如下


#价格追踪存储过程(某件商品对于某个客户的价格改变后,自动更新新的价格到追踪表,供下次下单使用)
use tlb_trade;
#如果已经存在该触发器则删除
DROP trigger IF EXISTS price_track_insert;
#创建开始
DELIMITER $
#更新订单清单表之后,创建价格追踪的触发器
create trigger price_track_insert after update  on  order_goods 
#每条记录都执行该操作
for each row
#开始业务
begin
#定义四个变量
declare a int;
declare b int;
declare c int;
declare d int;
#获取订单状态
set b = (select AUDITSTATUS from place_order where ID=new.ORDERID);
#判断清单状态
if new.SALEFUNCTION=1 then 
#获取订单的业务员和客户id
set a = (select PERSONID from order_ref_person where ID=new.ORDERID);
set c = (select CUSTOMERID from order_ref_customer where ID=new.ORDERID);
set d=(select count(*) from price_track where CUSTOMERID=c and GOODSID=new.GOODSID);
#判断价格追踪是否存在,不存在新增记录,存在则更新记录
if d=0 then 
 insert into price_track(PERSONID,CUSTOMERID,GOODSID,CREATETIME,PRICE) values(a,c,new.GOODSID,now(),new.price);
else
update price_track set price_track.PRICE=new.price where CUSTOMERID=c and GOODSID=new.GOODSID;
#结束触发器
end if;
end if;
end$
DELIMITER ;

1、详细触发器说明

https://www.cnblogs.com/wangprince2017/p/7827091.html

2、详细存储过程说明

http://blog.****.net/a__yes/article/details/52795793