需求
-
数据表中有一个时间字段和一个状态字段,如果当前时间超过了表中的时间,就要把这条表记录的状态字段进行更改。
-
刚开始的想法是想用代码写一个定时任务来修改这个状态字段,但是后来一想,定时任务会频繁的调用数据库,总感觉不是很好,索性把这个工作直接交给数据库来完成,而不需要我们的程序来完成。
1、开启数据库的定时策略
首先查看数据库的定时策略是否开启
命令 : show variables like '%event_sche%';
event_scheduler 为 OFF 表示并未开启,然后执行开启开启命令
命令: set global event_scheduler=1;
重新查看定时策略,为ON 表示开启成功
注意:以上的改法在数据库重启后将会恢复为原来状态,要想数据库重启后也可以让event_scheduler开启,则需要在配置文件my.ini的设置。修改如下,然后重启mysql服务即可。
需要将配置加入 [mysqld]下
event_scheduler=ON
2、创建函数
创建一个函数后将要改的sql放里面,根据自己的业务修改
update td_lk_report set report_state = 3 where time_of_arrival < NOW() and report_state = 0;
可以执行函数测试一下
3、创建定时事件
完成!!!