Home  >  Article  >  Database  >  MySql如何执行定时任务

MySql如何执行定时任务

WBOY
WBOYOriginal
2016-06-07 16:21:22954browse

Mysql属于中小型数据库系统,它的事件调度器Event Scheduler是在mysql 5.1才开始引入事件调度器是在 MySQL 5.1 中新增的另一个特色功能,可以作为定时任务调度器,取代部分原先只能用操作系统任务调度器才能完成的定时功能。事件调度器是定时触发执行的,在

   Mysql属于中小型数据库系统,它的事件调度器Event Scheduler是在mysql 5.1才开始引入事件调度器是在 MySQL 5.1 中新增的另一个特色功能,可以作为定时任务调度器,取代部分原先只能用操作系统任务调度器才能完成的定时功能。事件调度器是定时触发执行的,,在这个角度上也可以称作是"临时的触发器"。触发器只是针对某个表产生的事件执行一些语句,而事件调度器则是在某一个(间隔)时间执行一些语句。事件是由一个特定的线程来管理的,也就是所谓的"事件调度器"。

  代码:

  /*开启event_scheduler,也可以设置为on*/

  set global event_scheduler =1;

  /*创建简单的任务,每分钟执行一次,从一个表取数据插入到另一个表,也可以定时取,可以参看下面文档,此处为简单例子*/

  CREATE EVENT MyEvent

  ON SCHEDULE EVERY 1 MINUTE

  DO

  INSERT INTO list_test (字段1,字段1,字段1,字段1,字段1) select 字段1,字段1,字段1,字段1,字段1 from 表2 where id = 510;

  /*每天固定时间执行*/

  CREATE EVENT EVENT_ADD_FOR20_ENOUGH

  ON SCHEDULE EVERY 1 DAY

  STARTS TIMESTAMP '2009-12-18 02:58:00'/×MYSQL注意时区设置,默认非中国时区×/

  DO

  SQL语句

  下载:MySQL-Events-CN.rar

  再加两段吧

  代码:

  DELIMITER $$

  DROP PROCEDURE IF EXISTS `mystock`.`TEST_KKK`$$

  CREATE PROCEDURE `mystock`.`TEST_KKK`()

  /*LANGUAGE SQL

  | [NOT] DETERMINISTIC

  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }

  | SQL SECURITY { DEFINER | INVOKER }

  | COMMENT 'string'*/

  BEGIN

  DECLARE NUM INTEGER DEFAULT 0;

  DECLARE $A INT;

  SELECT (20-COUNT(STOCK_CODE)) as number into NUM FROM get_stock_list WHERE FLAG = 0 AND STIME = curdate();

  IF NUM>0 THEN

  PREPARE STMP FROM 'INSERT INTO get_stock_list (stock_code,stock_name,close,raises,stime) select stock_code,stock_name,close,result1,selectd from choice_stock where stock_code not in (select stock_code from get_stock_list where stime = curdate() and flag = 0) and selectd = curdate() and selectd = curdate() order by id limit ?' ;

  SET @A = NUM;

  EXECUTE STMP USING @A;

  END IF;

  END$$

  DELIMITER ;

  代码:

  DELIMITER $$

  DROP FUNCTION IF EXISTS `mystock`.`FUNCTION_ADD_STOCK_FOR20`$$

  CREATE DEFINER=`root`@`localhost` FUNCTION `FUNCTION_ADD_STOCK_FOR20`() RETURNS int(11)

  BEGIN

  DECLARE NUM,ANOTHER INTEGER;

  SELECT COUNT(STOCK_CODE) as number into NUM FROM get_stock_list WHERE FLAG = 0 AND STIME = curdate();

  if(NUM

  THEN

  SET ANOTHER = 20 - NUM;

  INSERT INTO get_stock_list (stock_code,stock_name,close,raises,stime) select stock_code,stock_name,close,result1,selectd from choice_stock where stock_code not in (select stock_code from get_stock_list where stime = curdate() and flag = 0) order by id LIMIT 10;

  END IF;

  RETURN NUM;

  END$$

  DELIMITER ;

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn