mysql事件(执行的定时器)

查看mysql事件状态是否开启 SHOW VARIABLES LIKE 'event_scheduler'  为off的话即未开启

开启mysql事件SET GLOBAL event_scheduler=1 或on;开启mysql事件

ON COMPLETION

正常情况下,一旦事件已过期,它将立即删除。你可以通过指定  ON COMPLETION PRESERVE  来重写此性能。使用  ON COMPLETION NOT PRESERVE  只是使默认非持久性的性能明确。

 EVERY 时间(单位)的数量时间单位[STARTS 时间戳] [ENDS时间戳],用来完成重复的计划任务。时间单位较多,按需选择。

EVERY
在定期间隔重复的行动,你可以用一个 EVERY 子句之后是一个 interval。(+INTERVAL 与 EVERY 不能同时使用。)

STARTS
EVERY 子句还可能包含一个非必须的 STARTS 子句。STARTS 之后是一个 timestamp 值表示行动应该何时开始重复,也可以用 +INTERVAL 间隔以指定「由现在开始」的时间量。

例如: EVERY 3 MONTH STARTS CURRENT_TIMESTAMP + 1 WEEK  的意思是「每 3 个月,从现在起一周后开始」。

ENDS
EVERY 子句还可包含一个非必须的 ENDS 子句。ENDS 关键字之后是一个 timestamp 值告诉 MySQL 何时停止重复事件。你也可以用 +INTERVAL 间隔与 ENDS 一起。

例如:EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 4 WEEK 相当于「每十二个小时,从现在起三十分钟后开始,并于现在起四个星期后结束」。


DELIMITER $$


CREATE EVENT `test_insert` ON SCHEDULE EVERY 1 DAY STARTS TIMESTAMP('2018-02-01','15:39:00') ON COMPLETION PRESERVE ENABLE 
DO BEGIN
DECLARE yestMonth VARCHAR(10);
SET yestMonth='20170301';
IF EXISTS(SELECT row_id FROM A WHERE DATE_FORMAT(SYNCHRODATE,'%Y%m%d')=yestMonth)
THEN
DELETE FROM A WHERE  DATE_FORMAT(SYNCHRODATE,'%Y%m%d')=yestMonth;
END IF;
INSERT INTO A
(
row_id,
city
)
SELECT 
    i.`ROW_ID`,
    zg.`CITY`
  FROM
    B zg 
  GROUP BY zg.`CITY`
END $$

DELIMITER ;

表示第一次执行的时间为2018-02-01 15:39:00

以后每天都是15:39:00开始执行

. AT 时间戳,用来完成单次的计划任务。

CREATE EVENT `test_insert` ON SCHEDULE AT TIMESTAMP(CURRENT_DATE ,'14:00:00')  ON COMPLETION PRESERVE ENABLE 
DO BEGIN
DECLARE yestMonth VARCHAR(10);
SET yestMonth='20170301';
IF EXISTS(SELECT row_id FROM A WHERE DATE_FORMAT(SYNCHRODATE,'%Y%m%d')=yestMonth)
THEN
DELETE FROM A WHERE  DATE_FORMAT(SYNCHRODATE,'%Y%m%d')=yestMonth;
END IF;
INSERT INTO A
(
row_id,
city
)
SELECT 
    i.`ROW_ID`,
    zg.`CITY`
  FROM
    B zg 
  GROUP BY zg.`CITY`
END $$

DELIMITER ;

--每个月的一号凌晨1 点执行
CREATE EVENT EVENT2  
ON SCHEDULE EVERY 1 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY (CURDATE())-1 DAY ), INTERVAL 1 MONTH ),INTERVAL 1 HOUR )
ON COMPLETION PRESERVE ENABLE
DO
   BEGIN
     CALL STAT();
   END
---每个季度一号的凌晨2点执行
CREATE EVENT TOTAL_SEASON_EVENT
ON SCHEDULE EVERY 1 QUARTER STARTS DATE_ADD(DATE_ADD( DATE ( CONCAT( YEAR (CURDATE()), '-' ,ELT(QUARTER(CURDATE()),1,4,7,10), '-' ,1)),INTERVAL 1 QUARTER),INTERVAL 2 HOUR )
ON COMPLETION PRESERVE ENABLE
DO
   BEGIN
     CALL SEASON_STAT();
   END
--每年1月1号凌晨四点执行
CREATE EVENT TOTAL_YEAR_EVENT
ON SCHEDULE EVERY 1 YEAR STARTS DATE_ADD( DATE (CONCAT( YEAR (CURDATE()) + 1, '-' ,1, '-' ,1)),INTERVAL 4 HOUR )
ON COMPLETION PRESERVE ENABLE
DO
   BEGIN
     CALL YEAR_STAT();
   END

猜你喜欢

转载自blog.csdn.net/zsw_12345/article/details/79655095