【发布时间】:2016-07-10 14:43:19
【问题描述】:
我使用 codeigniter 框架
例如我有A表,我希望我的系统每2分钟自动删除A表中的所有记录
能不能做到?
谢谢
【问题讨论】:
-
你可以使用一个简单的 cronjob 吗?
-
或者你可以使用
mysql event scheduler
标签: php mysql codeigniter
我使用 codeigniter 框架
例如我有A表,我希望我的系统每2分钟自动删除A表中的所有记录
能不能做到?
谢谢
【问题讨论】:
mysql event scheduler
标签: php mysql codeigniter
您可以使用 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。
【讨论】:
最好和最快的方法是截断表而不是删除,所以你可以通过 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 在 Linux 上运行,则通过 cronjob;如果 Mysql 在 Windows 机器上运行,则通过任务管理器:
写“截断表mytable;”语法在一个文件中,并从 cronjob 或任务调度程序中调度它。
注意:如果您不想重置表中的 auto_increment id,请使用 delete 语句而不是 truncate,因为 truncate 语句会将其重置为 1。
【讨论】:
您可以使用 Cronjob 每 2 分钟删除一次表 A 中的所有记录。将您的 PHP 脚本(带有删除功能)分配给您的网络服务器上的 Cronjob。
【讨论】: