mysql触发器与存储过程

一、异同点

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

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


二、缺点

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

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

三、存储过程

     1、简单创建存储过程



    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、触发器的创建


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.csdn.net/a__yes/article/details/52795793

猜你喜欢

转载自blog.csdn.net/lq18050010830/article/details/79442596
今日推荐