查看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 间隔以指定「由现在开始」的时间量。
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