时间调度器是在MySQL5.1后新增的功能,它类似linux下面的任务调度器crontab,在这里可以理解为时间触发器,将数据库按自定义时间周期触发某种操作。
创建事件调度器
CREATE
[DEFINER = { user | CURRENT_USER }]
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'string']
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}
如上是一种格式,事件名称在create event后面指定
通过ON SCHEDULE子句指定事件在何时执行及执行频率
通过DO子句指定要执行的具体操作或事件。
请注意,我们在创建事件调度器需要有event权限,假如我使用普通用户(没有event权限)去创建
我们需要给该用户授予event的权限;
当我们指定definer时候,如果你不具有super权限,唯一允许的用户值是自己,关于definer的更多可以查看我的上一篇文章,这里不再累述
创建好之后我们使用show events\G查看状态:
ok现在应该已经每隔30秒插入数据了吧,我们去select一下---转折点,并没有按照这个事件插入,为什么?
^^因为event scheduler没有启动,所以该事件不会运行,我们可以查看一下事件调度器状态
而如果要打开需要super_priv权限,我们这里使用root用户将event_scheduler设置为on
set global event_scheduler =on;
如上便已经刚开始执行了,注意我们还应该有event具体内容对应的权限,这里应为event是insert,所以我们还应该有insert权限。
如果事件调度器不再使用,我们可以禁用或者删除掉: