源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2022-03-23 15:06 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:详解MySQL用事件调度器Event Scheduler创建定时任务
[b]前言[/b] 事件调度器相当于操作系统中的定时任务(如:Linux中的cron、Window中的计划任务),但MySql的事件调度器可以精确到秒,对于一些实时性要求较高的数据处理非常有用。 [b]1. 创建/修改事件(EVENT)[/b] 在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、[code]event_name[/code] - 事件名,可以是任何合的MySql标识符,不能超64个字符。 创建事件时,可以同时指定[code]Schema[/code],语法结构为:[code]schema_name.event_name[/code]      2、[code]schedule [/code]- 调度规则,规定事件的执行时间与执行规则。是一个可包含以下值的子语句:
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、[code]event_body[/code] - 事件体,可以是单行SQL语法,或是BEGIN……END语句块 查看已创建的事件,可以使用[code]SHOW[/code]语名:
SHOW EVENTS;
[b]事件的修改[/b] 对于已存在事件调度器,可以使用[code]ALTER[/code]语句进行修改,语法结构如下:
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]
事件的开启与关闭本质是使用[code]ALTER[/code]语句修改已创建的事件。如,[b]关闭一个事件[/b]:
ALTER EVENT e_test ON COMPLETION PRESERVE ENABLE;
[b]开启一个事件:[/b]
ALTER EVENT e_test ON COMPLETION PRESERVE DISABLE;
[b]一些事件使用示例[/b] 一个最简单的示例,将[code]myschema.mytable[/code]表的[code]mycol[/code]列,每小时自增1:
CREATE EVENT myevent
  ON SCHEDULE 
  AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
  DO
   UPDATE myschema.mytable SET mycol = mycol + 1;
这样,我们就创建一个名为[code]myevent[/code]的事件,它会在事件创建后每小时执行一次。设置的执行规则等价于:
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;
[code]DO[/code]执行的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 ; 
[b]2. 事件调度器的配置[/b] [b]2.1 事件调度器状态[/b] 要保证创建的事件能正常执行,首先应该开启事件调度器,可以通过以下3种方式查看调度器状态:
SHOW VARIABLES LIKE 'event_scheduler';
SELECT @@event_scheduler;
SHOW PROCESSLIST;
查看某个事件的执行情况:
SELECT * FROM information_schema.EVENTS;
以上会输出当关[code]Schema[/code]中所有的事件信息,可以先通过[code]DESC information_schema.EVENTS;[/code]查看输出字段,再查看所需要的信息。如,我只想看事件名及最后执行时间:
SELECT EVENT_NAME, LAST_EXECUTED FROM information_schema.EVENTS;
[b]2.2 开启/关闭事件调度器[/b] 如果事件调度器未开启,可以通过以下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即可。 [b]总结[/b] 以上就是在MySQL中用事件调度器Event Scheduler创建定时任务的全部内容,希望本文的内容对大家学习使用MySQL能有所帮助。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部