`
qn_lf
  • 浏览: 121439 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

mysql计划任务 转

阅读更多

MySQL5.1.x 版本中引入了一项新特性 EVENT ,顾名思义就是事件、定时任务机制,在指定的时间单元内执行特定的任务,因此今后一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。此功能是对 Oracle Job/Schedule 的模仿, 5.1.X 版本以上才支持。

 

Event Scheduler作为一种数据库对象,其增删改的DDL语句与其他对象非常相似,无非CREATE、ALTER、DROP等,创建的基本语法是:

 CREATE EVENT        (1)
          [IF NOT EXISTS]        (2)
          event_name         (3)
          ON SCHEDULE schedule      (4)
          [ON COMPLETION [NOT] PRESERVE]   (5)
          [ENABLE | DISABLE]       (6)
          [COMMENT 'comment']       (7)
          DO sql_statement        (8)
     逐条介绍:
     (1) 创建Event嘛,这俩关键字当然不能少了
     (2) 如果不存在同名的数据库对象才创建
     (3) 计划任务的名字。作为数据库对象,都有一个本库内唯一的名字做标识
     (4) 计划任务的计划,重点就在这儿。有两个关键字来设定任务的执行计划:AT和EVERY:
          AT指定的是一个一次性计划,后面跟着一个时间戳,后续的sql语句将在指定的时间被执行一次;
          EVERY指定的是一个周期性计划,在该子句中可以指定从某时间点到某时间点期间,每隔某周期就执行一次该任务。
     (5) 任务整个执行完毕后,该计划任务对象是否还在数据库中保留。默认不保留
     (6) 有效或失效。默认有效
     (7) 真正要执行的语句

 

   例子

   1)创建一张表

  

   CREATE TABLE `aaa` (
   `timeline` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   PRIMARY KEY (`timeline`)
   ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
   

   2) 创建事件

    每秒钟新增一条数据

   CREATE EVENT e_test_insert
   ON SCHEDULE EVERY 1 SECOND
   DO INSERT INTO test.aaa VALUES (CURRENT_TIMESTAMP);

   这里的时间点可以根据需要自己设定  

 

   3)开启事件

   ALTER EVENT e_test_insert ENABLE;

 

   4)关闭事件

   ALTER EVENT e_test_insert DISAVLE;

  

   5)删除事件

   DROP EVENT e_test_insert ;

   这里建议最好在加上 IF EXISTS    

   DROP EVENT IF EXISTS  e_test_insert ; 

 

 

应用

 

因at和every不能共用的。

 

首先查看event是否开启

  show variables like '%sche%';

将事件计划开户

  set global event_scheduler =1;

 

每个月1号凌晨3点的事件

create event e5

ON SCHEDULE EVERY 1 MONTH

STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY), INTERVAL 1 MONTH),INTERVAL 3 HOUR)   ON COMPLETION PRESERVE ENABLE

DO

INSERT INTO test.aaa VALUES (CURRENT_TIMESTAMP);

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics