我正在寻找一种方法从我的MySQL表中删除旧行,我还没有真正理解我发现的问题和答案,所以我希望有人可以澄清。我在表格中添加了一个Timestamp列,用于存储创建行的日期。如果该行超过四个月,我不想删除它。我已经查看了触发器但是如果我已经正确理解,插入触发器只允许你使用你插入的行?也许我错了,但我对触发器很新,甚至不了解何时/如何运行它们?仅运行一次就足够了,每当有人插入某些内容时,是否会自动重复该操作(如果是插入触发器)?
我经常运行insertQuery,每次有人请求他们的绘画的URL。我使用的是php,我的表结构如下:
DatabaseID || theKey || Timestamp
1 abcd 2016-01-02
2 a1bc 2016-01-03
3 a1sb 2016-01-03
4 a12b 2016-01-05
编辑:忘记提及,我希望删除旧行是自动的,并且每周至少运行一次。
答案 0 :(得分:1)
拥有一个mysql事件调度程序http://dev.mysql.com/doc/refman/5.7/en/create-event.html
是理想的作为第一步,您需要将调度程序激活为
SET GLOBAL event_scheduler = ON;
请注意,如果重新启动服务器,则需要重置服务器 以上更好的设置event_scheduler =在[mysqld]下的某个地方 默认的mysql配置文件中的部分,通常是/etc/my.cnf,make 一定要重启mysql服务器
设置调度程序后,运行以查看其是否正常工作,您应该看到
show variables like '%event_scheduler%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| event_scheduler | ON |
+-----------------+-------+
最后在终端上将调度程序写为
delimiter //
create event if not exists clean_old_records
on schedule every 1 week
do
begin
delete from your_table_name
where
Timestamp < date_sub(curdate(),interval 1 month) ;
end; //
delimiter ;
在上面的示例中,它将删除超过一个月的记录,您可以拥有自己的值。