使用MySQL的事件调度器(Event Scheduler)来定期删除表中的数据。

假设你要删除的表是mytable,并且表中有一个名为created_at的日期时间类型的列,存储了每条记录的创建时间。你可以通过以下步骤设置表只存储30天的数据:

1. 创建一个事件(Event),指定事件的名称、开始时间和结束时间,以及事件的执行频率和执行内容。以下是一个例子:

CREATE EVENT delete_old_data
ON SCHEDULE EVERY 1 DAY
STARTS '2023-05-01 00:00:00'
ENDS '2030-12-31 00:00:00'
DO
  DELETE FROM mytable WHERE created_at < DATE_SUB(NOW(), INTERVAL 30 DAY);

这个事件的作用是每天执行一次,从mytable表中删除所有创建时间早于30天前的记录。事件的开始时间是2023年5月1日,结束时间是2030年12月31日。

2.开启事件调度器。

如果你的MySQL服务器上没有启用事件调度器,你需要在MySQL配置文件中添加以下配置(需要重启,永久生效):

event_scheduler = ON

或者在MySQL命令行客户端中执行以下语句(重启后失效):

SET GLOBAL event_scheduler = ON;

查看设置好的定时调度任务开关状态:

SHOW VARIABLES LIKE 'event_scheduler';

Mysql设置表只存储一段时间的数据-LMLPHP

3.验证事件是否生效。你可以通过以下命令来查看所有的事件:

SHOW EVENTS;

如果你的事件已经创建成功,你应该能够在输出中看到该事件的信息。

这样,每天定时执行事件调度器,就可以保证mytable表中只存储30天内的数据。
Mysql设置表只存储一段时间的数据-LMLPHP

4.查看设置好的任务详情:

SELECT * FROM information_schema.EVENTS;
04-25 12:23