我有这个存储过程。我怎么能以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
答案 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,请按以下步骤操作:
运行此命令:SET GLOBAL event_scheduler = ON;
如果ERROR 1229(HY000):变量'event_scheduler'是GLOBAL 变量,应使用SET GLOBAL设置: mportant
可以仅在服务器启动时将事件调度程序设置为DISABLED。如果event_scheduler为ON或OFF,则无法在运行时将其设置为DISABLED。此外,如果事件调度程序在启动时设置为DISABLED,则无法在运行时更改event_scheduler的值。
要禁用事件调度程序,请使用以下两种方法之一:
作为启动服务器时的命令行选项:
--event-scheduler=DISABLED
在服务器配置文件(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作业,该脚本本身会调用该过程。