mysql event 定时更新任务

如何用mysql event 来 创建定时更新数据任务
1. 首先开启事件
(1) 查看event_scheduler是否开启
show variables like ‘event_scheduler’;

这里写图片描述
2 开始mysql 事件
set global event_scheduler = on;

3 首先了解什么叫做事件,事件也就是mysql的定时任务
下面是我自己写的一个事件,亲测有效,可以放心使用
我会一一注释。

#创建一个事件,指定用户权限,并且创建多久执行一次。我是用navicat  界面创建的,很方便
CREATE DEFINER=`root`@`localhost` EVENT `update_gold` ON SCHEDULE EVERY '0:1' MINUTE_SECOND STARTS '2017-07-12 15:59:14' ON COMPLETION PRESERVE DISABLE DO BEGIN
   declare stop int default 0;# 创建变量 必要
   declare var_person int default 0;
   declare var_nums int default 0;

   declare var_id int default 0;

   #set @c = (SELECT person, (num - get_list) AS nums  FROM ar_main WHERE `status` = 1);
   declare cur CURSOR FOR (SELECT id, person , (num - get_list) AS nums  FROM ar_main WHERE `status` = 1 AND end_time < NOW());  
   #上面创建一个变量,并且后面查询语句,赋值给cur
   declare CONTINUE HANDLER FOR SQLSTATE '02000' SET stop = null;
   #这里创建,一个游标, 02000指的整个数组,  一直到结束为止,stop 被赋值 null
   OPEN cur;  
   #开启 游标
   FETCH cur INTO var_id,var_person,var_nums;  
    #这里是  把cur 里面三个值 赋值给 我自己定义的三个变量 var_id,var_person,var_nums 有先后关系
   WHILE ( stop is NOT NULL) DO 
   #循环 
   update user_info set  user_score = user_score + var_nums where user_id = var_person   ;  
   #更新
   UPDATE ar_main  SET  `status` = 3 WHERE  id = var_id ;
    /*游标向下走一步*/  
   FETCH cur INTO var_id,var_person,var_nums;  
   #游标结束
   END WHILE;  
   #关闭循环
   CLOSE cur;
   释放结果集
END

4 过于测试如何测试
新建一个mysql 存储过程,赋值黏贴,然后就成功了,然后在里面执行。
执行的时候,有个bug,一直提示受影响的行数为0,但是我的测试结果,数据却是没问题的
所以,不必执着这个问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值