出处之一:http://www.cnblogs.com/c840136/articles/2388512.html
//查看事件是否开启
SHOW VARIABLES LIKE 'event_scheduler'或
SELECT @@event_scheduler;
若显示:
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| event_scheduler | OFF |
+-----------------+-------+
则可执行
//开启事件
SET GLOBAL event_scheduler = 1
或
SET GLOBAL event_scheduler = ON;
也可以直接在启动命令加上“–event_scheduler=1”,例如:
mysqld ... --event_scheduler=1
my.ini or my.cnf 中的
[mysqld]
添加 event_scheduler=ON
创建事件(CREATE EVENT)
语法:
CREATE EVENT [IF NOT EXISTS] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']
DO sql_statement;
schedule:
AT TIMESTAMP [+ INTERVAL INTERVAL]
| EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]
.ON SCHEDULE
有两种设定计划任务的方式:
#单次计划任务:
AT 时戳
#重复的计划任务
EVERY 时间(单位)的数量 时间单位 [STARTS 时戳][ENDS 时戳]
在两种计划任务中,时戳可以是任意的TIMESTAMP 和DATETIME 数据类型,要求提供的是将来的时间(大于CURRENT_TIMESTAMP),
而且小于Unix时间的最后时间(等于或小于'2037-12-31 23:59:59')
时间单位是关键词:YEAR,MONTH,DAY,HOUR,MINUTE 或者SECOND
[ON COMPLETION [NOT] PRESERVE]
COMPLETION 当单次计划任务执行完毕后或当重复性的计划任务执行到了ENDS阶段。
而声明PRESERVE的作用是使事件在执行完毕后不会被Drop掉
INTERVAL:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
修改事件(ALTER EVENT)
ALTER EVENT event_name
[ON SCHEDULE schedule]
[RENAME TO new_event_name]
[ON COMPLETION [NOT] PRESERVE]
[COMMENT 'comment']
[ENABLE | DISABLE]
[DO sql_statement]
1) 临时关闭事件
ALTER EVENT e_test DISABLE;
2) 开启事件
ALTER EVENT e_test ENABLE;
删除事件(DROP EVENT)
语法很简单,如下所示:
DROP EVENT [IF EXISTS] event_name
调用存储过程
-- 执行一次(当前时间一分钟之后执行一次)
DELIMITER //
CREATE EVENT `monitor_trends_day_event`
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
ON COMPLETION PRESERVE ENABLE DO
BEGIN
CALL loop_update_trendsday_uint();
END
//
======================================================
CREATE EVENT statistics_event
ON SCHEDULE EVERY 1 DAY STARTS '2016-01-06 00:00:00'
ON COMPLIETION PRESERVE
ENABLE
ON
INSERT INTO monitor_records_day(PROVINCEID, OPERATOR, NETWORK_TYPE, COLLECT_DATE, RECORD_VALUE)
SELECT PROVINCEID, OPERATOR, NETWORK_TYPE, COLLECT_TIME, AVG(RECORD_VALUE) value
FROM `monitor_records`
WHERE COLLECT_TIME>=date_sub(curdate(),interval 1 day) AND COLLECT_TIME<curdate()
GROUP BY PROVINCEID, OPERATOR, NETWORK_TYPE