简单建立MySQL定时任务

最近公司有个需求,需要将MySQL中某一张表中的某几个固定的字段定时同步到另外一张表中,且字段名称需要变更。至于为什么会这么做,不详细描述,大体原因是公司奇葩。

  1. 首先检查是否开启了定时任务,需要用到一下代码
查看event是否开启 : SHOW VARIABLES LIKE '%event_sche%';
将事件计划开启 : SET GLOBAL event_scheduler = 1;
将事件计划关闭 : SET GLOBAL event_scheduler = 0;
关闭事件任务 : ALTER EVENT eventName ON COMPLETION PRESERVE DISABLE;
开启事件任务 : ALTER EVENT eventName ON COMPLETION PRESERVE ENABLE;
查看事件任务 : SHOW EVENTS;
  1. 创建一个存储过程
DROP PROCEDURE IF EXISTS `create_mes_sync_record`; 
DELIMITER ;;
CREATE  PROCEDURE `create_mes_sync_record`    #创建一个名为create_mes_sync_record的存储过程
    COMMENT '同步MES数据'
BEGIN 
    insert into mes_sync (
        vin, sn, car_conf_code, 
        series_code, series_name, product_time, created_at, updated_at, del_flag
        ) select 
        res.vin_code, res.btm_sn, 
        concat(res.type_code, '.', res.car_code), 
        res.option_code, res.option_code, res.update_time, NOW()+interval 8 hour, NOW()+interval 8 hour, 0        #这里的时间+8小时因为mysql在docker容器中,而容器时间与北京时间相差8小时
        from
            (select * from btm_check_result b 
                where vin_code not in (
                                        select vin from mes_sync m)) res
END
;;
DELIMITER ;        #总体来说,就是把btm_check_result中的一部分字段重命名后插入mes_sync表中
  1. 设置一个定时任务,调用这个存储过程
DELIMITER //
DROP EVENT IF EXISTS event_mes_sync_record//
CREATE EVENT event_mes_sync_record
on schedule EVERY 1 DAY STARTS date_add(curdate(),interval 1 DAY_HOUR)     #射箭间隔为每天,开始时间为现在的日期的凌晨0点,加上1小时(即凌晨1点)
do 
BEGIN
        call create_mes_sync_record;
END//
DELIMITER ;

这样就可以了,如果不放心,可以使用SHOW EVENTS命令来查看定时任务是否生效

你可能感兴趣的:(简单建立MySQL定时任务)