为什么调度事件不从mysql数据库中删除数据

时间:2014-09-18 15:17:58

标签: php mysql codeigniter phpmyadmin

我正在使用php和mysql。使用codeigniter中的日期(Y-m-d H:i:s)将数据插入日期时间字段。

CREATE EVENT AutoDeleteRows
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 30 SECOND 
DO 
DELETE LOW_PRIORITY FROM a_database.event_temp_users 
WHERE registration_date< DATE_SUB(NOW(), INTERVAL 1 MINUTE)

1分钟后,我正在刷新表格,但数据仍在那里。该事件每30秒运行一次并删除1分钟或更长时间的所有行,不是吗?

使用phpmyadmin和InnoDB引擎。

EDIT 即使我做了

CREATE EVENT AutoDeleteRows
ON SCHEDULE EVERY 30 SECOND 
DO 
DELETE LOW_PRIORITY FROM a_database.event_temp_users 
WHERE registration_date< DATE_SUB(NOW(), INTERVAL 1 MINUTE)

它仍然无效

1 个答案:

答案 0 :(得分:2)

如果您的活动应该每30秒运行一次,那么您必须使用:

CREATE EVENT AutoDeleteRows
ON SCHEDULE EVERY 30 SECOND 
DO 
DELETE LOW_PRIORITY FROM a_database.event_temp_users 
WHERE registration_date< DATE_SUB(NOW(), INTERVAL 1 MINUTE)

代替。

  

要定期重复操作,请使用EVERY子句。

使用AT,您的活动将仅在此特定时间点执行一次:

  

AT时间戳用于一次性事件。它指定事件仅在时间戳给出的日期和时间执行一次,时间戳必须包括日期和时间,或者必须是解析为日期时间值的表达式。

都来自章节CREATE EVENT Syntax

如果事件调度程序正在运行,您将必须检查。这可以通过

完成
SELECT @@event_scheduler;

如果结果应为OFF,并且您有权启动事件计划程序,则可以使用

激活事件计划程序
SET GLOBAL event_scheduler = 'ON';

请参阅Event Scheduler Configuration

  

全局event_scheduler系统变量确定是否   事件计划程序已在服务器上启用并运行。它有一个   这三个值会影响事件调度,如下所述:

     
      
  • OFF:事件计划程序已停止。事件调度程序线程未运行,未显示在SHOW PROCESSLIST的输出中,并且未执行任何调度事件。 OFF是event_scheduler的默认值。
  •   
     

当事件调度程序停止时(event_scheduler为OFF),可以通过将event_scheduler的值设置为ON来启动它。 (见下一项。)

     
      
  • ON:启动事件调度程序;事件调度程序线程运行并执行所有计划事件。

  •   
  • 禁用:此值使事件计划程序无法运行。当事件调度程序为DISABLED时,事件调度程序线程不会运行(因此不会出现在SHOW PROCESSLIST的输出中)。此外,无法在运行时更改事件调度程序状态。

  •