MySQL事件调度器Event Scheduler
来源:互联网 发布:windows操作系统平板 编辑:程序博客网 时间:2024/05/15 22:14
我们都知道windows的计划任务和linux的crontab都是用来实现一些周期性的任务和固定时间需要执行的任务。在mysql5.1之前我们完成数据库的周期性操作都必须借助这些操作系统实现。在mysql5.1及其之后的版本增加了计划任务的功能(mysql事件调度器Event Scheduler)。
事件调度器是定时触发执行的,在这个角度上也可以称作是"临时的触发器"。触发器只是针对某个表产生的事件执行一些语句,而事件调度器则是在某一个(间隔)时间执行一些语句。事件是由一个特定的线程来管理的,也就是所谓的"事件调度器"。启用事件调度器后,拥有 SUPER 权限的账户执行 SHOW PROCESSLIST 就可以看到这个线程了。
一、事件调度器event_scheduler的开启:
mysql服务器时间调度器的开启是由一个名叫
mysql>
要使用事件调度器必须先开启
1、SET GLOBAL event_scheduler = ON
2、SET GLOBAL event_scheduler = 1;
3、SET @@global.event_scheduler = ON;
4、SET @@global.event_scheduler = 1;
二、事件调度器event_scheduler的语法:
事件调度器event_scheduler的语法主要包括创建,修改,删除,新建一个event后,如果还未删除,我们可以在mysql的information_schema下的EVENTS表中查到该event。
1、创建event(
语法:CREATE EVENT [IF NOT EXISTS]
ON SCHEDULE
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT '
DO
说明:
语法:AT
[ON COMPLETION [NOT] PRESERVE]: 可选项,默认是
[COMMENT '
[ENABLE | DISABLE] :设定event的状态,默认ENABLE:表示系统尝试执行这个事件, DISABLE:关闭该事情,可以用alter修改
DO
注意使用复用语句的时候记得使用分隔符(例3);而且sql语句是由限制,这种限制跟函数fuction和触发器 trigger中的sql语句限制是一样的,具体是指:LOCK TABLES; UNLOCK TABLES;CREATE EVENT(#bug 18896);ALTER EVENT(#bug 18896);LOAD DATA;CREATE EVENT 是不可预处理的;CREATE EVENT在存储过程中使用时合法的;CREATE EVENT不可以再嵌入式的embedded mysql数据中使用。
例子:
例1、CREATE EVENT myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
UPDATE myschema.mytable SET mycol = mycol + 1;(从创建开始一小时后执行1次该语句)
例2、CREATE EVENT e_hourly
ON SCHEDULE EVERY 1 HOUR
COMMENT 'Clears out sessions table each hour.'
DO
DELETE FROM site_activity.sessions;(每隔一小时删除session表)
例3:DELIMITER |
CREATE EVENT e
ON SCHEDULE EVERY 5 SECOND
DO
BEGIN
DECLARE v INTEGER;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
SET v = 0;
WHILE v < 5 DO INSERT INTO t1 VALUES (0);
UPDATE t2 SET s1 = s1 + 1; SET v = v + 1;
END WHILE;
END |
DELIMITER ;
2、修改event(
语法:ALTER EVENT
[ON SCHEDULE
[RENAME TO
[ON COMPLETION [NOT] PRESERVE]
[COMMENT '
[DO
说明:语句中的
注意:修改event仅仅对已经存在的event起作用
例子:
1、
2、先创建一个event:
CREATE EVENT myevent
ON SCHEDULE EVERY 6 HOUR
COMMENT 'A sample comment.'
DO
UPDATE myschema.mytable SET mycol = mycol + 1;
修改1:
ALTER EVENT myevent
ON SCHEDULE EVERY 12 HOUR
STARTS CURRENT_TIMESTAMP + 4 HOUR; (将原来的6小时执行一次,修改成4小时后每12小时执行一次)
修改2:
ALTER EVENT myevent DISABLE;(将默认的ENABLE修改为 DISABLE)
2、修改event(
语法:
DROP EVENT [IF EXISTS]
事件调度器是定时触发执行的,在这个角度上也可以称作是"临时的触发器"。触发器只是针对某个表产生的事件执行一些语句,而事件调度器则是在某一个(间隔)时间执行一些语句。事件是由一个特定的线程来管理的,也就是所谓的"事件调度器"。启用事件调度器后,拥有 SUPER 权限的账户执行 SHOW PROCESSLIST 就可以看到这个线程了。
一、事件调度器event_scheduler的开启:
mysql服务器时间调度器的开启是由一个名叫
event_scheduler
的全局变量控制的,这个变量默认为OFF或者是0。
查看是否开启:
mysql> SHOW GLOBAL VARIABLES LIKE 'event%'
; //OFF 关闭;ON 开启;mysql>
SELECT @@event_scheduler;
//0 关闭;1 开启;要使用事件调度器必须先开启
event_scheduler,开启的方法如下:
1、SET GLOBAL event_scheduler = ON
2、SET GLOBAL event_scheduler = 1;
3、SET @@global.event_scheduler = ON;
4、SET @@global.event_scheduler = 1;
二、事件调度器event_scheduler的语法:
事件调度器event_scheduler的语法主要包括创建,修改,删除,新建一个event后,如果还未删除,我们可以在mysql的information_schema下的EVENTS表中查到该event。
1、创建event(
CREATE EVENT
)语法:CREATE EVENT [IF NOT EXISTS]
event_name
ON SCHEDULE
schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT '
comment
']DO
sql_statement
;说明:
event_name
:创建的event名字(唯一确定的);
ON SCHEDULE:计划任务 schedule
: 决定event的执行时间和频率(注意时间一定要是将来的时间,过去的时间会出错),有两种形式 AT和EVERY语法:AT
timestamp
[+ INTERVAL interval
] | EVERYinterval
[STARTS timestamp
] [ENDS timestamp
]
interval
: quantity
{YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}(具体说明请参考手册);[ON COMPLETION [NOT] PRESERVE]: 可选项,默认是
ON COMPLETION NOT PRESERVE 即计划任务执行完毕后自动drop该事件;
ON COMPLETION PRESERVE则不会drop掉 ;[COMMENT '
comment
']:可选项,comment
用来描述event;相当注释,最大长度64个字节[ENABLE | DISABLE] :设定event的状态,默认ENABLE:表示系统尝试执行这个事件, DISABLE:关闭该事情,可以用alter修改
DO
sql_statement
: 需要执行的sql语句(可以是复合语句);注意使用复用语句的时候记得使用分隔符(例3);而且sql语句是由限制,这种限制跟函数fuction和触发器 trigger中的sql语句限制是一样的,具体是指:LOCK TABLES; UNLOCK TABLES;CREATE EVENT(#bug 18896);ALTER EVENT(#bug 18896);LOAD DATA;CREATE EVENT 是不可预处理的;CREATE EVENT在存储过程中使用时合法的;CREATE EVENT不可以再嵌入式的embedded mysql数据中使用。
例子:
例1、CREATE EVENT myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
UPDATE myschema.mytable SET mycol = mycol + 1;(从创建开始一小时后执行1次该语句)
例2、CREATE EVENT e_hourly
ON SCHEDULE EVERY 1 HOUR
COMMENT 'Clears out sessions table each hour.'
DO
DELETE FROM site_activity.sessions;(每隔一小时删除session表)
例3:DELIMITER |
CREATE EVENT e
ON SCHEDULE EVERY 5 SECOND
DO
BEGIN
DECLARE v INTEGER;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
SET v = 0;
WHILE v < 5 DO INSERT INTO t1 VALUES (0);
UPDATE t2 SET s1 = s1 + 1; SET v = v + 1;
END WHILE;
END |
DELIMITER ;
2、修改event(
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
]说明:语句中的
ON SCHEDULE
, ON COMPLETION
,COMMENT
, ENABLE
/ DISABLE
, and DO
与CREATE EVENT中的完全一致注意:修改event仅仅对已经存在的event起作用
例子:
1、
ALTER EVENT
no_such_event
ON SCHEDULE
everu '2:3' DAY_HOUR(result:ERROR 1517 (HY000): Unknown event 'no_such_event')2、先创建一个event:
CREATE EVENT myevent
ON SCHEDULE EVERY 6 HOUR
COMMENT 'A sample comment.'
DO
UPDATE myschema.mytable SET mycol = mycol + 1;
修改1:
ALTER EVENT myevent
ON SCHEDULE EVERY 12 HOUR
STARTS CURRENT_TIMESTAMP + 4 HOUR; (将原来的6小时执行一次,修改成4小时后每12小时执行一次)
修改2:
ALTER EVENT myevent DISABLE;(将默认的ENABLE修改为 DISABLE)
2、修改event(
ALTER EVENT
)语法:
DROP EVENT [IF EXISTS]
event_name
- MySQL 事件调度器(Event Scheduler)
- MySQL 事件调度器(Event Scheduler)
- MySQL事件调度器Event Scheduler
- MySQL事件调度器Event Scheduler
- MySQL事件调度器Event Scheduler
- MySQL事件调度器Event Scheduler
- MySql事件调度(Event Scheduler)
- [MySQL 5.1 体验]MySQL 事件调度器(Event Scheduler)
- [MySQL 5.1 体验]MySQL 事件调度器(Event Scheduler)
- MySQL 5_1新特性 - 事件调度器(Event Scheduler)
- MySQL 5.1新特性之事件调度器(Event Scheduler)
- MySQL 5.1新特性之事件调度器(Event Scheduler)
- MySQL 5.1新特性之事件调度器(Event Scheduler)
- MySQL 5.1新特性之事件调度器(Event Scheduler)
- MySQL 5.1新特性之事件调度器(Event Scheduler)
- MySQL 5.1新特性之事件调度器(Event Scheduler)
- MySQL 5.1新特性之事件调度器(Event Scheduler)
- MySQL计划任务(事件调度器)(Event Scheduler)
- iPhone 常用面试题目
- Core Data 编程指南1
- 列表解析和生成器之间空间和时间的对比
- jqGrid的编辑——基于Form Editing的增、删、改操作
- 旧版标准日语第17~20课单词
- MySQL事件调度器Event Scheduler
- hadoop中使用lzo压缩
- 解决jqGrid新增或编辑记录保存成功但提示错误的问题
- Oracle开发专题之:行列转换
- How to use script to get all oracle EBS Form name and corresponding fmb file name
- Ubuntu启动问题以及Grub Rescue修复方法 FR
- mysql 中 时间和日期函数
- lightOJ 1135 lazy 操作
- 使用Gson将Java对象转换为Json