mysql event 定时更新任务

来源:互联网 发布:儿童 编程网站 编辑:程序博客网 时间:2024/05/21 09:49

如何用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,但是我的测试结果,数据却是没问题的
所以,不必执着这个问题。

原创粉丝点击