事件(event)是MySQL在相应的时刻调用的过程式数据库对象。一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”。
事件和触发器类似,都是在某些事情发生的时候启动。当数据库上启动一条语句的时候,触发器就启动了,而事件是根据调度事件来启动的。由于他们彼此相似,所以事件也称为临时性触发器。
事件的优缺点:
a.一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。
b.可以实现每秒钟执行一个任务,这在一些对实时性要求较高的环境下就非常实用了。
c.定时触发,不可以调用。
开启事件调度器
MySQL事件调度器event_scheduler负责调用事件,它默认是关闭的。
查看是否开启
[sql]
mysql> show variables like ‘%event_scheduler%’;
+—————–+——-+
| Variable_name | Value |
+—————–+——-+
| event_scheduler | OFF |
+—————–+——-+
[/sql]
通过命令行开启或关闭
[sql]
SET GLOBAL event_scheduler = ON; #OFF为关闭
SET @@global.event_scheduler = ON; #OFF为关闭
SET GLOBAL event_scheduler = 1; #0为关闭
SET @@global.event_scheduler = 1; #0为关闭
[/sql]
通过配置文件my.cnf开启或关闭
[php]
event_scheduler = 1 #或者ON为开启, 0或者OFF为关闭
[/php]
查看调度器线程
[sql]show processlist;[/sql]
事件创建语法
[sql]
CREATE
[DEFINER = { user | CURRENT_USER }]
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT ‘comment’]
DO event_body;
schedule:
AT timestamp [+ INTERVAL interval] …
| EVERY interval
[STARTS timestamp [+ INTERVAL interval] …]
[ENDS timestamp [+ INTERVAL interval] …]
interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
[/sql]
名词解释:
event_name :创建的event名字(唯一确定的)。
ON SCHEDULE:计划任务。
schedule: 决定event的执行时间和频率(注意时间一定要是将来的时间,过去的时间会出错),有两种形式 AT和EVERY。
[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 event_body: 需要执行的sql语句(可以是复合语句)。CREATE EVENT在存储过程中使用时合法的。
删除事件
[sql]DROP EVENT [IF EXISTS] event_name[/sql]
修改事件
[sql]
ALTER
[DEFINER = { user | CURRENT_USER }]
EVENT event_name
[ON SCHEDULE schedule]
[ON COMPLETION [NOT] PRESERVE]
[RENAME TO new_event_name]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT ‘comment’]
[DO event_body]
[/sql]
查看当前所在库的事件
[sql]show events;[/sql]
查看所有事件
[sql]select * form mysql.event;[/sql]
发表评论