我正在使用php和mysql。使用codeigniter中的date(Ymd H:i:s)将数据插入datetime字段。
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引擎。
编辑即使我这样做
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)
它仍然无法正常工作
如果您的事件每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时间戳用于一次性事件。它指定事件仅在时间戳指定的日期和时间执行一次,该时间必须同时包括日期和时间,或者必须是可解析为datetime值的表达式。
都来自CREATE EVENT语法一章
您将必须检查事件调度程序是否正在运行。这可以用
SELECT @@event_scheduler;
如果结果应该是OFF
并且您有权启动事件计划程序,则可以使用以下命令激活事件计划程序
SET GLOBAL event_scheduler = 'ON';
请参阅事件计划程序配置
全局event_scheduler系统变量确定事件调度程序是否已启用并在服务器上运行。它具有以下三个值之一,这会影响事件调度,如下所述:
- OFF:事件计划程序已停止。事件调度程序线程未运行,未在SHOW PROCESSLIST的输出中显示,并且未执行任何调度的事件。OFF是event_scheduler的默认值。
当事件计划程序停止时(event_scheduler为OFF),可以通过将event_scheduler的值设置为ON来启动它。(请参阅下一项。)
ON:事件调度程序已启动;事件调度程序线程将运行并执行所有调度的事件。
禁用:此值使事件计划程序无法运行。当禁用事件计划程序时,事件计划程序线程不会运行(因此不会出现在SHOW PROCESSLIST的输出中)。此外,事件调度程序状态不能在运行时更改。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句