mysql触发器与存储过程
2018-03-05 11:11
211 查看
一、异同点
触发器和存储过程都是一组mysql语句集,都可以实现一些比较复杂的业务逻辑,可以直接在数据库中,编写业务逻辑,对不同的表进行操作,执行效率较高,不同的是存储过程需要主动调用,如下:#给参数赋值
二、缺点
虽然触发器和存储过程可以加强代码的执行效率,但是把过多的业务逻辑存储于数据库中,不利于系统的运维管理,容易造成业务混乱,不利于系统的分成管理。
不同的数据库下,语法差异较大,不利于数据库移植,移植工作量大。
三、存储过程
1、简单创建存储过程
![](https://img-blog.csdn.net/20180305105521713?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHExODA1MDAxMDgzMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2、创建代码如下
3、查询与执行
use cpyx;
Show procedure status;
use cpyx;
CALL proc_while(5)
三、触发器
1、触发器的创建
![](https://img-blog.csdn.net/20180305110814502?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHExODA1MDAxMDgzMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
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
触发器和存储过程都是一组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
相关文章推荐
- mysql中的触发器以及存储过程的基础了解
- mysql查看所有存储过程,函数,视图,触发器,表
- MySQL 函数存储过程触发器定义简单示例
- MySQL存储过程及触发器
- MySQL的触发器、存储过程与读写分离
- mysql里的批处理(sql语句)、触发器、事务管理、存储过程
- mysql查看所有存储过程,函数,视图,触发器,表
- mysql查看所有存储过程,函数,视图,触发器,表
- 查看MySQL所有存储过程、函数、视图、触发器及表
- mysql之存储过程和触发器的应用
- mysql中的存储过程、触发器、视图的用法
- MySQL存储过程和触发器的实现--数据库学习笔记
- mysql 函数、存储过程、视图、触发器
- Mysql视图, 存储过程, 触发器, 事务
- mysql 查询表,视图,触发器,函数,存储过程
- mysql,sqlserver,oracle查看所有存储过程,函数,视图,触发器,表
- mysql存储过程和触发器 --- 一次很有意思的尝试
- 【MySQL笔记】触发器,存储过程和函数
- mysql 存储过程和触发器
- mysql查看所有存储过程,函数,视图,触发器,表,分页