Mysql 定时器

定时任务

  • 周期任务mysql

  • 查看命令sql

`show variables like '%event_sche%';`
  • 显示的event_scheduler为OFF时用如下命令开启
`set global event_scheduler=1;`
  • 注意:以上的改法在数据库重启后将会恢复为原来状态,要想数据库重启后也可让event_scheduler开启,则须要在配置文件my.ini的设置。修改以下,而后重启mysql服务便可。
`[mysqld]event_scheduler=ON //这一行加入mysqld标签下`

建立procedure(存储过程)

建立存储过程

use test;
delimiter //
create procedure down_goods()
begin
UPDATE df_goods_sku set `status` = 0  where `status`=1 and down_time < now();
end//
delimiter ;

删除存储过程

drop procedure dewn_goods;数据库

上面的代码说明:
  1. use test; 这个谁都知道,使用某个数据库,这里要强调的是存储过程必定是对于某个数据库而言的,因此必需要选中一个数据库才能建立成功。
  2. delimiter // 这个是将mysql中以;(分号)结尾的规定修改成以//(双斜杠)为语句结束符,由于存储过程里能够有多条sql 语句,里面的sql语句都以;号结尾,若是回车了那么系统会当作sql语句直接执行了,咱们但愿的是先定义这一系列sql语句而先不执行,因此要改下操做结束符。固然你在改后必定要改回来,你们能够看到最后一行有对应的修改回来的语句。
  3. 下面的是一块儿输入的,能够知道分别是建立存储过程test_proce(),名称能够随便起的,而后是在begin –end之间是定义一系列sql语句的就能够了,记住最后end结尾要以以前修改后的结尾符结束。
create procedure down_goods()
begin
UPDATE df_goods_sku set `status` = 0  where `status`=1 and down_time < now();
end//

建立定时任务

create event down_good
on schedule every 10 second
on completion preserve disable
do call down_goods();

删除任务

drop event up_good;code

代码说明:orm

  1. 上面为总体代码,敲完再写分号
  2. 第一行create event day_event是建立名为second_event的事件,注意此处没有括号
  3. 第二行是建立周期定时的规则,本处的意思是每秒钟执行一次
  4. 第三行on completion preserve disable是表示建立后并不开始生效。
  5. 第四行do call test_proce()是该event(事件)的操做内容,表示调用咱们刚刚建立的test_proce()存储过程。

查看定时任务event(事件),能够查看本机全部的事件

`SELECT event_name,event_definition,interval_value,interval_field,status FROM information_schema.EVENTS;`

开启已经建立好的event(事件)


alter event down_good on completion preserve enable; //开启定时任务
alter event down_good on completion preserve disable;//关闭定时任务

、常见周期定时规则


  • 周期执行–关键字 EVERY事件

    1. 单位有:second,minute,hour,day,week(周),quarter(季度),month,yearit

    2. 如:io

      on schedule every 1 second //每秒执行1次
      on schedule every 2 minute //每两分钟执行1次
      on schedule every 3 day //每3天执行1次
  • 在具体某个时间执行–关键字 ATevent

    1. 如:form

      on schedule at current_timestamp()+interval 5 day //5天后执行
      on schedule at current_timestamp()+interval 10 minute //10分钟后执行
      on schedule at '2016-10-01 21:50:00' //在2016年10月1日,晚上9点50执行
  • 在某个时间段执行–关键字STARTS ENDS

    1. 如:

      on schedule every 1 day starts current_timestamp()+interval 5 day ends current_timestamp()+interval 1 month //5天后开始天天都执行执行到下个月底
      
      on schedule every 1 day ends current_timestamp()+interval 5 day //从如今起天天执行,执行5天
相关文章
相关标签/搜索