欢迎投稿

今日深度:

MySQL数据篇(八)-- 存储过程的简单实现,

MySQL数据篇(八)-- 存储过程的简单实现,


  思考:一般我们的数据都是存储在数据库里面,对于常规的CRUD操作都是用代码实现,比如使用PHP做项目,所有的数据处理都需要主动操作代码实现。如果我们现在有一项目,业务需要在用户下单后,对用户的订单进行分润处理,比如在每个月的21号,对上个月所有的订单按设置的规则进行分润处理,当然shll脚本也可以实现,但是今天我们说的是如何通过数据库“存储过程”和“事件”来实现。

 

一、如下图,是MySQL官网所介绍的https://dev.mysql.com/doc/refman/5.5/en/stored-objects.html

  1、简单的理解“存储过程”就是我们平时写的SQL的集合,里面可能包含IF判断或者posLoop:LOOP循环和我们平时写PHP代码差不多,就是为了实现某个操作(CRUD);

    “事件”,就是我们设置的一个自动开关,可以按照我们设置的时间,比如每天12:00或者每分钟处理一次(调用你写的存储过程)。

BEGIN #处理t_user如果type = 1,则将num修改为200 #定义变量 DECLARE done int;#定义游标标记 DECLARE t_id int;#定义需要处理的id值 DECLARE t_type int;#定义记录值类型 #创建游标,并存储数据 DECLARE cur_test CURSOR FOR SELECT id,type FROM t_user LIMIT 500; #游标中的内容执行完后将done设置为1 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; #打开游标 OPEN cur_test; #执行循环 posLoop:LOOP #判断是否结束循环 IF done = 1 THEN LEAVE posLoop; END IF; #取游标中的值 FETCH cur_test INTO t_id,t_type; #如果type = 1,则将num修改为200 IF t_type = 1 THEN #执行更新操作 UPDATE t_user SET num = 200 WHERE id = t_id; END IF; #结束循环 END LOOP posLoop; #释放游标 CLOSE cur_test; END

  4、创建 “事件”调用写好的过程 p_t3()。调用 存储过程 一般用 CALL + 过程名。

   5、点击保存时,可能提示 “event_scheduler = OFF” 未开启,我们开启下即可,指令如下。注意,每次重启MySQL后,该值会设为 off 需要重新开启一下。

#开启
SET GLOBAL event_scheduler = ON;
#关闭
SET GLOBAL event_scheduler = OFF;

  最后:只要数据库服务开启,每分钟都会调用一次p_t3(),实现里面的业务规则。第一个简单存储过程加事件的调用,到此为止,至于为什么SQL里面这样写,我们往下看我的“MySQL实现定时清理过期数据”篇。

www.htsjk.Com true http://www.htsjk.com/Mysql/39244.html NewsArticle MySQL数据篇(八)-- 存储过程的简单实现, 思考:一般我们的数据都是存储在数据库里面,对于常规的CRUD操作都是用代码实现,比如使用PHP做项目,所有的数据处理都需要主动操作代码...
相关文章
    暂无相关文章
评论暂时关闭