您的位置:首页 > 数据库 > MySQL

mysql之event

2015-09-22 16:18 567 查看
出处之一: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: