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
//查看事件是否开启
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
相关文章推荐
- MySQL绿色版使用介绍
- MySQL修改root密码的多种方法
- MySQL卸载后重新安装出错的解决方法
- MySql篇
- [MySQL分享]MySQL启动以及my.cnf参数文件结构小结
- Mysql常用函数
- Mysql 5.5 主从复制
- MySQL5.6安装图解(windows7/8_64位)
- MySQL数据库MyISAM和InnoDB存储引擎的比较
- MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法
- 解决mysql数据库添加数据时报错:1366
- my.ini优化mysql数据库性能的十个参数(推荐)
- MYSQL1130错误的解决方案(转)
- nagios for mysql插件、脚本以及文档
- mysql中的null值和空值区别
- Mysql 常用查询函数
- mysql 数据备份出来
- MySQL 临时目录
- mysql中timestamp简单用法
- 关于MySQL的查询缓存