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;

 

posted @ 2021-04-15 20:31  天宇爱水  阅读(340)  评论(0编辑  收藏  举报