2010-06-18 24 views
23

這裏是我的查詢MySQL事件調度在特定時間每天

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

如何更新狀態爲「0」,在每天下午1點。我應該放什麼來代替TIMESTAMP?

回答

22

documentation on 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; 
+5

這並不爲我工作!我嘗試了10天DAY_HOUR,它只是立即執行並預定本身。我也不明白爲什麼會這樣。在我閱讀MySQL文檔時,DAY_HOUR是一種從現在開始指定幾天和幾小時的方式 - 它仍然是一個時間間隔。還是我完全誤解了? – Adam 2013-01-31 08:05:26

+0

同意@Adam。這似乎不符合每日下午1點運行的要求。基於幾次快速測試,我認爲它會每13小時執行一次。 ''選擇current_timestamp() ,date_add(current_timestamp(),interval 13 day_hour);' – Phil 2018-02-13 21:57:05

8

試試這個

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

我使用的情況是類似的,但我希望有一個日誌清除事件每天凌晨2點運行。正如我在上面的評論中所說的,DAY_HOUR對我來說不起作用。在我來說,我不介意有可能漏掉的第一天(並賦予它是在凌晨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 
+0

您不能使用'CURRENT_DATE()'而不是'str_to_date(date_format(now(),'%​​Y%m%d 0200' ),'%Y%m%d%H%i')'?不管怎樣,謝謝。 – Linus 2014-04-11 14:00:24

+0

是的 - 除了我希望能夠指定它每天運行在0200。如果您使用current_date,則無論您何時運行腳本來創建它,它都會每天運行。 – Adam 2014-04-11 16:58:16

+1

哦,我以爲CURRENT_DATE返回了一個格式爲:yyyy-MM-dd的日期,意思是時間是00:00,但也許我是不對的。 – Linus 2014-04-11 17:09:17

22

這可能爲時已晚爲你的工作,但這是我如何做到的。我希望每天在凌晨1點運行一次 - 我相信這與你正在做的事情類似。這是我如何做的:

CREATE EVENT event_name 
    ON SCHEDULE 
    EVERY 1 DAY 
    STARTS (TIMESTAMP(CURRENT_DATE) + INTERVAL 1 DAY + INTERVAL 1 HOUR) 
    DO 
    # Your awesome query 
+0

是否需要'TIMESTAMP(CURRENT_DATE)'?似乎只用'CURRENT_DATE + Interval ..'工作.' – Kaspars 2017-03-19 20:04:08

9
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; 
+1

如果可能的話請添加一個解釋.. – 2014-05-12 09:16:06

+1

SET GLOBAL event_scheduler = ON; - >用於激活mysql事件,如果沒有創建但不能運行。 http://dev.mysql.com/doc/refman/5.1/en/events-configuration.html – mercu 2014-05-16 15:09:37

1
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()); 
相關問題