MySQL事件调度器Event Scheduler
时间:2021-07-01 10:21:17
帮助过:13人阅读
事件调度器是定时触发运行的。在这个角度上也能够称作是"暂时的触发器"。触发器仅仅是针对某个表产生的事件运行一些语句。而事件调度器则是在某一个(间 隔)时间运行一些语句。事件是由一个特定的线程来管理的,也就是所谓的"事件调度器"。
启用事件调度器后。拥有
SUPER 权限的账户运行 SHOW PROCESSLIST 就能够看到这个线程了。
一、事件调度器event_scheduler的开启:
mysqlserver时间调度器的开启是由一个名叫 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
]
| EVERY interval
[STARTS timestamp
]
[ENDStimestamp
]
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
原文链接:http://blog.163.com/wumingli456@126/blog/static/28896414201082732227944/
MySQL事件调度器Event Scheduler
标签:into timestamp 不能 使用 嵌入 ica 权限 log color