如何在MySQL中安排存储过程

use*_*318 45 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
Run Code Online (Sandbox Code Playgroud)

zer*_*kms 70

您可以使用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();
Run Code Online (Sandbox Code Playgroud)

  • 我认为这应该是`DO CALL delete_rows_links();` (9认同)

小智 12

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

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();
Run Code Online (Sandbox Code Playgroud)


Ris*_*tam 6

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

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

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

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

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

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

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

    event_scheduler=DISABLED
    
    Run Code Online (Sandbox Code Playgroud)

    阅读MySQL 文档以获取更多信息.

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