您的位置:首页 > 数据库 > MySQL

mysql任务计划(转)

2008-06-05 13:59 302 查看
MySQL的功能越来越强大了,逐渐在想大型商业数据库靠拢了,这不,5.1的版本已然支持视图、触发器、job等功能。
下面简单介绍下我所使用的MySQL的job功能(也就是计划任务,Oracle中称job):
一、创建计划任务:
语法:
CREATE
[DEFINER = { user | CURRENT_USER }]     #计划任务的所有者,一般省略,则为创建者;
#否则需要有相关权限,则可以指定其它用户
      EVENT                                                     #计划任务关键字
      [IF NOT EXISTS]                       #如果不存在则创建,可以省略;否则如果存在,则报错
      event_name                                             #计划任务名称
      ON SCHEDULE schedule               #调度计划,如每20分钟,在几点开始等,参考下面的schedule详解
[ON COMPLETION [NOT] PRESERVE]      #对于执行一次的任务,默认执行完则删除.加此,
#可控制任务结束后计划任务是否删除或保留
[ENABLE | DISABLE | SLAVESIDE_DISABLED]        #指示创建的计划任务是否创建即有效(有
#效则立即执行一次),或禁止执行
      [COMMENT 'comment']                      #关于计划任务的注释,可放入任务的功能简洁
      DO sql_statement;                  #任务体,可以是单条语句,也可以是以BEGIN/END包裹的符合语句
schedule:                      
AT timestamp [+ INTERVAL interval] #在什么时候开始运行或某时刻之后interval时间
#在运行,用于运行一次的计划任务
| EVERY interval                        #或者简单的每隔interval时间运行一次
[STARTS timestamp [+ INTERVAL interval]] #STARTS和ENDS配合EVERY关键字,
#指定运行时间段,单独的STARTS指示STARTS以后的时间段
      [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}
                #quantity是具体数字,指示多少年或几月或几分钟等
二、更改计划任务
语法:
ALTER EVENT
      [DEFINER = { user | CURRENT_USER }] #更改缺省用户
      event_name
      [ON SCHEDULE schedule]            #更改调度时间
      [RENAME TO new_event_name]            #计划任务改名
      [ON COMPLETION [NOT] PRESERVE]        #更改一次运行结束后的行为
      [ENABLE | DISABLE | SLAVESIDE_DISABLED] #更改计划任务状态
      [COMMENT 'comment']                 #修改注释
      [DO sql_statement]                       #修改计划执行体
三、删除计划任务
语法:
DROP EVENT [IF EXISTS] event_name
四、开启MySQL计划任务功能支持
MySQL中对计划任务的支持是采用线程调度检测计划任务的。要此功能开启计划任务才会执行。查看调度器状态命令如下:
SHOW [FULL] PROCESSLIST/G
如下是没有开启的状态:
mysql> SHOW FULL PROCESSLIST/G
*************************** 1. row ***************************
       Id: 10
     User: root
     Host: localhost:4823
       db: mysql
Command: Query
     Time: 0
State: NULL
     Info: SHOW FULL PROCESSLIST
1 row in set (0.00 sec)
通过如下全局配置的设置来开启或关闭调度器:
SET GLOBAL event_scheduler = ON/OFF/1/0; --开/关
或SET @@global.event_scheduler = ON/OFF/1/0;
五、示例如下:
其中计划任务体内可以是简单语句,也可以调用存储过程
delimiter //
drop event if exists createmonsterevent//
create event createmonsterevent
on schedule every 20 minute
starts CURRENT_TIMESTAMP + INTERVAL 10 minute
      ENABLE
    COMMENT '刷怪计划任务'
      DO
             begin
                    #20分钟
                    Call createmonster(date_sub(sysdate(),INTERVAL 24 minute),
date_sub(sysdate(),INTERVAL 2 minute));
             end;
//
delimiter ;

引用自:http://hi.baidu.com/redberries/blog/item/801cc4f2b3c6c810b17ec55e.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  任务 mysql user date sql oracle