欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-12-19 14:18:22
前言 事件调度器相当于操作系统中的定时任务(如:linux中的cron、window中的计划任务),但mysql的事件调度器可以精确到秒,对于一些实时性要求较高的数据处理...

前言

事件调度器相当于操作系统中的定时任务(如: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能有所帮助。

上一篇:

下一篇: