MySQL定时调度器的使用(先定义一个函数(函数内含多条更新语句),再定义一个event事件调用该函数) | 您所在的位置:网站首页 › mysql调用函数 › MySQL定时调度器的使用(先定义一个函数(函数内含多条更新语句),再定义一个event事件调用该函数) |
MySQL定时调度器的使用
一、想实现的功能:二、使用步骤:三、拓展:四、补充:五、常用代码备份:六、执行SELECT * FROM mysql.event; 查出的event字段中,last_executed、starts、ends字段为什么显示的时间与我们设定的少8个小时?
推荐相关博文:mysql的定时调度器(内含多条与定时调度器相关的常用查询语句以及使用例子) 一、想实现的功能: 我想每隔5分钟执行一次event事件,事件的功能是每隔5分钟更新某张表的状态字段。(比如:系统执行一次event事件,当检查到距离开始时间这个字段还有半小时,会自动更新状态字段,把“未开始”替换成“即将开始”状态)查了百度,比较好的方法是创建一个函数,再创一个event事件。函数里含多条我们写的update语句,且该函数名称记为update_state()。event事件就专门用call update_state()运行该函数即可。 二、使用步骤: 先在my.ini配置文件中设置永久开启时间控制器event_scheduler = ON并重启mysql。(配置步骤详见:MySQL正确配置my.ini的event_scheduler = ON)创建一个函数,名为update_state,创建步骤如下:
下一步紧接着: 推荐相关博文:SQL返回受影响行数 自己动手试试能不能实现该功能,博主偷懒就不实现了,下面给你们演示在函数体中使用ROW_COUNT()统计函数体执行后所有受影响的行数值n,并返回值n,补充update_state()函数体,如下↓(注意我把每个update的判断条件改成不等于了,这样比较完善): BEGIN #定义变量n,类型为INTEGER,默认值为0 declare n INTEGER DEFAULT 0; #将距离开始时间还有半个小时(1800s)的记录状态改为1 UPDATE `schedule` SET s_state='1' WHERE timestampdiff(SECOND,current_timestamp,s_starttime) BETWEEN 0 AND 1800 AND s_state '1'; set n=ROW_COUNT()+n; #将位于开始时间和结束时间之间的记录改变其状态为2 UPDATE `schedule` SET s_state='2' WHERE timestampdiff(SECOND,current_timestamp,s_starttime) 0 AND s_state '2'; set n=ROW_COUNT()+n; #将已经过了结束时间的记录状态改为3 UPDATE `schedule` SET s_state='3' WHERE timestampdiff(SECOND,current_timestamp,s_endtime) |
CopyRight 2018-2019 实验室设备网 版权所有 |