使用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';
3.验证事件是否生效。你可以通过以下命令来查看所有的事件:
SHOW EVENTS;
如果你的事件已经创建成功,你应该能够在输出中看到该事件的信息。
这样,每天定时执行事件调度器,就可以保证mytable表中只存储30天内的数据。
4.查看设置好的任务详情:
SELECT * FROM information_schema.EVENTS;