MySQL事件调度器每天在特定时间运行

MySQL事件调度器每天在特定时间运行,mysql,events,scheduler,Mysql,Events,Scheduler,这是我的问题 CREATE EVENT RESET ON SCHEDULE AT TIMESTAMP DO UPDATE `ndic`.`students` SET `status` = '0'; 如何在每天下午1点将状态更新为“0” 我可以用什么来代替时间戳呢?这个很好,但是需要一段时间才能正确 您有两个问题,第一,使事件再次发生,第二,使其在每天13:00运行 此示例创建一个重复事件 CREATE EVENT e_hourly ON SCHEDULE EVERY 1

这是我的问题

CREATE EVENT
RESET ON SCHEDULE AT TIMESTAMP DO
UPDATE `ndic`.`students`
SET `status` = '0';  
如何在每天下午1点将状态更新为“0”

我可以用什么来代替时间戳呢?

这个很好,但是需要一段时间才能正确

您有两个问题,第一,使事件再次发生,第二,使其在每天13:00运行

此示例创建一个重复事件

CREATE EVENT e_hourly
    ON SCHEDULE
      EVERY 1 HOUR
    COMMENT 'Clears out sessions table each hour.'
    DO
      DELETE FROM site_activity.sessions;
在命令行MySQL客户端中,您可以:

SHOW EVENTS;
这将列出每个事件及其元数据,比如它应该只运行一次,还是重复出现

第二个问题:将重复事件指向特定的计划项

通过尝试不同的表达方式,我们可以得出如下结论:

CREATE EVENT IF NOT EXISTS `session_cleaner_event`
ON SCHEDULE
  EVERY 13 DAY_HOUR
  COMMENT 'Clean up sessions at 13:00 daily!'
  DO
    DELETE FROM site_activity.sessions;
试试这个

CREATE EVENT event1
ON SCHEDULE EVERY '1' DAY
STARTS '2012-04-17 13:00:00' -- should be in the future
DO
-- your statements
END

我的用例类似,只是我希望每天凌晨2点运行日志清理事件。正如我在上面的评论中所说的,一天一小时对我来说不起作用。在我的情况下,我并不介意可能错过第一天(而且,如果是在凌晨2点运行,那么明天凌晨2点几乎总是下一天凌晨2点),因此我使用:

CREATE EVENT applog_clean_event
ON SCHEDULE 
    EVERY 1 DAY
    STARTS str_to_date( date_format(now(), '%Y%m%d 0200'), '%Y%m%d %H%i' ) + INTERVAL 1 DAY
COMMENT 'Test'
DO 

这对你的工作来说可能太晚了,但我是这样做的。我想要每天凌晨1点跑步——我相信这和你正在做的很相似。我是这样做的:

CREATE EVENT event_name
  ON SCHEDULE
    EVERY 1 DAY
    STARTS (TIMESTAMP(CURRENT_DATE) + INTERVAL 1 DAY + INTERVAL 1 HOUR)
  DO
    # Your awesome query
“重要!”

SET GLOBAL event_scheduler = ON;

这对我不管用。我尝试了10天的时间,它只是立即执行并自行安排。我也不明白为什么会这样。当我阅读MySQL文档时,DAY_HOUR是一种指定从现在开始的天数和小时数的方法——它仍然是一个间隔。还是我完全误解了?同意“亚当”。这似乎不符合每天下午1点跑步的要求。根据一些快速测试,我认为它将每13小时执行一次<代码>选择当前时间戳(),日期添加(当前时间戳(),间隔13天/小时)
按计划创建事件特定时间从表名称中选择结束日期,其中结束日期=当前日期DO UPDATE active=0从表名称中选择结束日期,其中结束日期=当前日期如何运行此操作?是否可以使用
当前日期()
而不是
str\u to\u日期(日期格式(现在(),“%Y%m%d 0200”),“%Y%m%d%H%I”)
?无论如何,谢谢。是的-除了我想能够指定它每天运行0200。如果使用current_date,则它将在每天运行脚本创建它的任何时间运行。哦,我认为current_date返回的日期格式为:yyyy-MM-dd,表示时间为00:00,但可能我不正确。我的道歉。你是对的。我把我的SQL实现搞混了-我也使用Oracle pl/SQL,current_date是一个日期对象,包含用户时区中的当前日期和时间-更像MySQLs now()。所以是的,如果你想让它在0000运行,那么current_date可能会起作用。但是,如果您想指定ir每天运行的时间,那么您需要上面的解决方案。啊,很高兴知道。不必吹毛求疵,但实际上你可以这样做
(CURRENT_DATE()+INTERVAL X HOUR)+INTERVAL 1 DAY
,但正如你所说,对于Oracle,它可能不起同样的作用。感谢您提供info.SET GLOBAL event_scheduler=ON;->用于激活mysql事件(如果未创建但从未运行)。是否需要时间戳(当前日期)
?似乎只需
当前日期+间隔即可工作。
这太不可思议了!我没有意识到“开始”是如何计算的,直到我执行了咨询,然后我说:这意味着“明天00:01:00”。。。非常感谢你!
SET GLOBAL event_scheduler = ON;
CREATE EVENT test_event_03
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
   INSERT INTO messages(message,created_at)
   VALUES('Test MySQL recurring Event',NOW());