2016-04-05 60 views
0

表table_cache的是這樣的:如何MySQL動態日期時間的事件調度?

id cache_name  created date 
    1 cache one  2016-03-06 01:20:04 
    2 cache two  2016-03-06 09:40:34 
    3 cache three 2016-03-06 11:40:04 

的MySQL腳本來截斷table_cache的是這樣的:

CREATE 
EVENT `deleteEvent` 
ON SCHEDULE EVERY 30 MINUTE STARTS '2016-04-06 00:00:00' 
ON COMPLETION NOT PRESERVE 
ENABLE 
DO 
TRUNCATE table_cache; 

這將截斷的table_cache每30分鐘還星2016年4月6日00:00:00

但這不是我想要的。我想截斷的table_cache從表格中table_cache

那麼每30分鐘還星域CREATED_DATE,根據上表:

id=1, truncate on 2016-03-06 01:50:04 
id=2, truncate on 2016-03-06 10:10:34 
id=3, truncate on 2016-03-06 12:10:04 

無論是可以做什麼?

回答

2

TRUNCATE根據定義,是從表格中刪除每一行的操作。這不是你想要的。

你想要什麼可能是沿着

DELETE FROM table_cache 
     WHERE created_date < DATE_SUB(NOW(), INTERVAL 30 MINUTE) 

線將刪除是當時的查詢運行較舊的30分鐘內所有條目的東西。

您需要根據您需要的生命週期的精確程度來決定運行此查詢的頻率。 (例如,如果您每半小時運行一次查詢,那麼在8點1分創建的行只有在8點31分纔有資格刪除,因此它將一直持續到查詢在9點運行爲止,這使得它實際上最後59分鐘,而不是30分。這是否是一個問題取決於你的應用程序。)

+0

因此,對我而言,它不使用MySQL事件調度程序? –

+0

您可以使用事件調度程序定期運行該查詢,就像您在示例中所做的那樣。 – duskwuff

+0

那麼,MySQL Event Scheduler不能使用dinamyc datetime? –