删除旧行MySQL Trigger - 初学者

时间:2016-01-18 13:43:47

标签: mysql database triggers

我正在寻找一种方法从我的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

编辑:忘记提及,我希望删除旧行是自动的,并且每周至少运行一次。

1 个答案:

答案 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 ;

在上面的示例中,它将删除超过一个月的记录,您可以拥有自己的值。