当前位置: 移动技术网 > IT编程>数据库>Mysql > 详解MySQL用事件调度器Event Scheduler创建定时任务

详解MySQL用事件调度器Event Scheduler创建定时任务

2017年12月12日  | 移动技术网IT编程  | 我要评论

朴民瑛,黑根王官网,炼宝专家

前言

事件调度器相当于操作系统中的定时任务(如:linux中的cron、window中的计划任务),但mysql的事件调度器可以精确到秒,对于一些实时性要求较高的数据处理非常有用。

1. 创建/修改事件(event)

在mysql中,创建一个新的调度器使用create event,其语法规则如下:

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;

在以上语句中,包含以下参数:

     1、event_name - 事件名,可以是任何合的mysql标识符,不能超64个字符。
创建事件时,可以同时指定schema,语法结构为:schema_name.event_name

     2、schedule - 调度规则,规定事件的执行时间与执行规则。是一个可包含以下值的子语句:

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}

      3、event_body - 事件体,可以是单行sql语法,或是begin……end语句块

查看已创建的事件,可以使用show语名:

show events;

事件的修改

对于已存在事件调度器,可以使用alter语句进行修改,语法结构如下:

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]

事件的开启与关闭本质是使用alter语句修改已创建的事件。如,关闭一个事件

alter event e_test on completion preserve enable;

开启一个事件:

alter event e_test on completion preserve disable;

一些事件使用示例

一个最简单的示例,将myschema.mytable表的mycol列,每小时自增1:

create event myevent
  on schedule 
  at current_timestamp + interval 1 hour
  do
   update myschema.mytable set mycol = mycol + 1;

这样,我们就创建一个名为myevent的事件,它会在事件创建后每小时执行一次。设置的执行规则等价于:

create event myevent
  on schedule 
  every 1 hour
  starts current_timestamp
  do
   update myschema.mytable set mycol = mycol + 1;

如果需要间隔一定时间再开启事务,如,1天后开启:

create event myevent
  on schedule 
  every 1 hour
  starts current_timestamp + interval 1 day
  do
   update myschema.mytable set mycol = mycol + 1;

do执行的sql可以是一个语句块,如:

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. 事件调度器的配置

2.1 事件调度器状态

要保证创建的事件能正常执行,首先应该开启事件调度器,可以通过以下3种方式查看调度器状态:

show variables like 'event_scheduler';
select @@event_scheduler;
show processlist;

查看某个事件的执行情况:

select * from information_schema.events;

以上会输出当关schema中所有的事件信息,可以先通过desc information_schema.events;查看输出字段,再查看所需要的信息。如,我只想看事件名及最后执行时间:

select event_name, last_executed from information_schema.events;

2.2 开启/关闭事件调度器

如果事件调度器未开启,可以通过以下4种方式启用:

set global event_scheduler = 1;
set @@global.event_scheduler = 1;
set global event_scheduler = on;
set @@global.event_scheduler = on;

1或on表示设置为开启状态。同样的,如果需要关闭只要将值0或off即可。

总结

以上就是在mysql中用事件调度器event scheduler创建定时任务的全部内容,希望本文的内容对大家学习使用mysql能有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网