如何在MySQL中安排存储过程

时间:2011-07-03 01:50:56

标签: mysql database stored-procedures mysql-routines

我有这个存储过程。我怎么能以5秒的间隔运行它?就像消除时间超过一天的数据的例程一样?

DROP PROCEDURE IF EXISTS `delete_rows_links` 
GO

CREATE PROCEDURE delete_rows_links
BEGIN 

    DELETE activation_link
    FROM activation_link_password_reset
    WHERE  TIMESTAMPDIFF(DAY, `time`, NOW()) < 1 ; 

END 

GO

4 个答案:

答案 0 :(得分:65)

您可以使用mysql调度程序每5秒运行一次。您可以在http://dev.mysql.com/doc/refman/5.1/en/create-event.html

找到样本

从未使用过,但我希望这会奏效:

CREATE EVENT myevent
    ON SCHEDULE EVERY 5 SECOND
    DO
      CALL delete_rows_links();

答案 1 :(得分:11)

我使用了这个查询,它对我有用:

CREATE EVENT `exec`
  ON SCHEDULE EVERY 5 SECOND
  STARTS '2013-02-10 00:00:00'
  ENDS '2015-02-28 00:00:00'
  ON COMPLETION NOT PRESERVE ENABLE
DO 
  call delete_rows_links();

答案 2 :(得分:6)

要创建cronjob,请按以下步骤操作:

  1. 运行此命令:SET GLOBAL event_scheduler = ON;

  2. 如果ERROR 1229(HY000):变量'event_scheduler'是GLOBAL 变量,应使用SET GLOBAL设置:  mportant

  3. 可以仅在服务器启动时将事件调度程序设置为DISABLED。如果event_scheduler为ON或OFF,则无法在运行时将其设置为DISABLED。此外,如果事件调度程序在启动时设置为DISABLED,则无法在运行时更改event_scheduler的值。

    要禁用事件调度程序,请使用以下两种方法之一:

    1. 作为启动服务器时的命令行选项:

      --event-scheduler=DISABLED
      
    2. 在服务器配置文件(my.cnf或Windows系统上的my.ini)中: 包括服务器将读取的行(例如,在[mysqld]部分中):

      event_scheduler=DISABLED
      

      阅读MySQL documentation以获取更多信息。

       DROP EVENT IF EXISTS EVENT_NAME;
        CREATE EVENT EVENT_NAME
       ON SCHEDULE EVERY 10 SECOND/minute/hour
       DO
       CALL PROCEDURE_NAME();
      

答案 3 :(得分:3)

如果您对数据库外的解决方案持开放态度:您可以设置一个运行脚本的cron作业,该脚本本身会调用该过程。