44

这是我的查询

CREATE EVENT
RESET ON SCHEDULE AT TIMESTAMP DO
UPDATE `ndic`.`students`
SET `status` = '0';  

如何每天下午 1 点将状态更新为“0”。

我可以用什么代替TIMESTAMP

4

6 回答 6

57

这对你的工作来说可能为时已晚,但我是这样做的。我希望每天凌晨 1 点运行一些东西——我相信这与你正在做的事情相似。这是我的做法:

CREATE EVENT event_name
  ON SCHEDULE
    EVERY 1 DAY
    STARTS (TIMESTAMP(CURRENT_DATE) + INTERVAL 1 DAY + INTERVAL 1 HOUR)
  DO
    # Your awesome query
于 2014-01-02T20:59:16.173 回答
39

CREATE EVENT的文档非常好,但需要一段时间才能正确完成。

你有两个问题,第一,让事件重复,第二,让它在每天 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;
于 2011-01-19T12:40:05.507 回答
15

My use case is similar, except that I want a log cleanup event to run at 2am every night. As I said in the comment above, the DAY_HOUR doesn't work for me. In my case I don't really mind potentially missing the first day (and, given it is to run at 2am then 2am tomorrow is almost always the next 2am) so I use:

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 
于 2013-01-31T09:01:57.093 回答
14

尝试这个

CREATE EVENT event1
ON SCHEDULE EVERY '1' DAY
STARTS '2012-04-17 13:00:00' -- should be in the future
DO
-- your statements
END
于 2012-04-17T12:32:48.350 回答
13
DROP EVENT IF EXISTS xxxEVENTxxx;
CREATE EVENT xxxEVENTxxx
  ON SCHEDULE
    EVERY 1 DAY
    STARTS (TIMESTAMP(CURRENT_DATE) + INTERVAL 1 DAY + INTERVAL 1 HOUR)
  DO
    --process;

¡重要!->

SET GLOBAL event_scheduler = ON;
于 2014-05-12T08:59:04.543 回答
2
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());
于 2015-08-25T15:25:48.037 回答