我正在使用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)
它仍然无效
答案 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的输出中)。此外,无法在运行时更改事件调度程序状态。