如何自动删除每x分钟?

时间:2016-03-23 10:43:55

标签: php mysql codeigniter

我使用codeigniter框架

例如,我有表A.我希望我的系统每2分钟自动删除表A中的所有记录

是否可以做到?

谢谢

3 个答案:

答案 0 :(得分:7)

您可以使用MySQL事件调度程序。

<强>先决条件:

您必须在mysql服务器中启用event_scheduler。

检查事件调度程序是ON还是OFF

SELECT @@event_scheduler;

要转动event_scheduler ON,请运行以下查询:

SET GLOBAL event_scheduler = ON;

注意:如果重新启动MYSQL Server,则将重置事件调度程序状态,除非在配置文件中写入以下内容。

对于Windows: my.ini 文件中的,请在[mysqld]部分

下写下
[mysqld]
event_scheduler=on

对于Linux: my.cnf 文件

[mysqld]
event_scheduler=on

<强>事件:

以下事件将从名为tablename的表中删除数据。

CREATE 
EVENT `deleteEvent`
ON SCHEDULE EVERY 2 MINUTE STARTS '2016-03-23 00:00:00'
ON COMPLETION NOT PRESERVE
ENABLE
DO
DELETE FROM tablename;

该活动将首次在'2016-03-23 00:00:00'开始 之后,事件将每隔2分钟安排一次,并将从您的表中删除数据。

您可以使用Truncate代替DELETE

TRUNCATE vs DELETE

答案 1 :(得分:3)

最好和快速的方法是截断表而不是删除,所以你可以通过mysql自己的事件调度程序或cronjob来完成 -

按事件安排程序 -

DELIMITER $$

ALTER DEFINER=`root`@`localhost` EVENT `trun_table` ON SCHEDULE EVERY 2 MINUTE STARTS '2016-03-23 16:30:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN
        truncate table mytable;
    END$$

DELIMITER ;

如果Mysql在Windows机器上运行,则运行在Linux或OR任务管理器上的cronjob:

写“truncate table mytable;”语法在一个文件中,并从cronjob或任务调度程序安排它。

注意:如果您不想在表中重置auto_increment id,则使用delete语句而不是truncate,因为truncate语句会将其重置为1.

答案 2 :(得分:2)

您可以使用Cronjob每2分钟删除表A中的所有记录。将PHP脚本(带删除功能)分配给Web服务器上的Cronjob。