mysql存储过程和job

来源:互联网 发布:java rpc 实现 编辑:程序博客网 时间:2024/05/29 07:23
1.存储过程
create procedure feifei
 (   
 a int,   
 b int   
 )   
begin
declare c int;
set c = a + b;   
select c as sum;  
end;

call feifei(1,2);

drop procedure if exists feifei;  


CREATE TABLE `timetocid` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `cid` int(11) DEFAULT NULL,
  `optime` date DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.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 ;