mysql添加定时器
1、event详细信息
# 查询所有的event事件
SELECT * FROM mysql.event;
# 开启定时器 0:off 1:on
SET GLOBAL event_scheduler = 1;
# 查看是否开启定时器
SHOW VARIABLES LIKE 'event_scheduler';
# 如果显示OFF,则输入以下语句开启:
set global event_scheduler = on;
# 注意
虽然这里用set global event_scheduler = on语句开启了事件;
但是每次重启电脑,或重启mysql服务后,会发现,事件自动关闭(event_scheduler=OFF),
所以想让事件一直保持开启,最好修改配置文件,让mysql服务启动的时候开启时间,
只需要在my.ini配置文件的[mysqld]部分加上event_scheduler=ON 即可
配置文件位置:C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
2、第一个案例
# 1、创建一个定时器1天执行一次 # 使用某个数据库 use secondary; delimiter // # 创建存储过程maxtime_proce(),名称可以随便起的 create procedure maxtime_proce() begin INSERT INTO `secondary`.`maxtime` (`deal_time`) #secondary.housedetailtest 表中 deal_time 字段减去 1 天: SELECT DATE_SUB(max(deal_time),INTERVAL 1 DAY) AS maxtime FROM secondary.housedetailtest; end// delimiter ; # 2、删除存储过程 # drop procedure maxtime_proce; # 3、创建定时任务 # 创建名为minute_event的事件,注意此处没有括号 create event minute_event # 创建周期定时的规则,本处的意思是每1天执行一次 on schedule every 1 day # 表示创建后并不开始生效。 on completion preserve disable # event(事件)的操作内容,表示调用我们刚刚创建的maxtime_proce()存储过程。 do call maxtime_proce(); # 4、删除定时任务 # drop event minute_event; # 5、查看定时任务event(事件),可以查看本机所有的事件 SELECT event_name,event_definition,interval_value,interval_field,status FROM information_schema.EVENTS; # 6、开启已经创建好的event(事件) alter event minute_event on completion preserve enable; # 开启定时任务 # alter event minute_event on completion preserve disable; # 关闭定时任务
3、第二个案例
# 创建定时任务 CREATE EVENT IF NOT EXISTS maxtime_event # 每天下午10点执行 ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 22 HOUR) # 开启定时任务 ON COMPLETION PRESERVE ENABLE # DO后是需要执行的sql DO INSERT INTO `secondary`.`maxtime` (`deal_time`) SELECT DATE_SUB(max(deal_time),INTERVAL 1 DAY) AS maxtime FROM secondary.housedetails;