55

我有这个存储过程。例如,我如何以 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

4 回答 4

80

您可以使用 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();
于 2011-07-03T01:55:41.090 回答
15

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

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();
于 2013-02-09T23:35:27.917 回答
9

要创建 cronjob,请执行以下步骤:

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

  2. 如果 ERROR 1229 (HY000): 变量 'event_scheduler' 是一个全局变量,应该使用 SET GLOBAL: 重要

只能在服务器启动时将事件调度程序设置为禁用。如果 event_scheduler 为 ON 或 OFF,则不能在运行时将其设置为 DISABLED。此外,如果 Event Scheduler 在启动时设置为 DISABLED,则无法在运行时更改 event_scheduler 的值。

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

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

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

    event_scheduler=DISABLED
    

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

     DROP EVENT IF EXISTS EVENT_NAME;
      CREATE EVENT EVENT_NAME
     ON SCHEDULE EVERY 10 SECOND/minute/hour
     DO
     CALL PROCEDURE_NAME();
    
于 2015-02-23T11:01:11.717 回答
3

如果您愿意接受数据库外解决方案:您可以设置一个 cron 作业来运行一个脚本,该脚本本身会调用该过程。

于 2011-07-03T01:56:41.730 回答