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