您的位置:首页 > 数据库 > MySQL

mysql触发器与存储过程

2018-03-05 11:11 211 查看
一、异同点
       触发器和存储过程都是一组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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: