删除旧行 MySQL 触发器 - 初学者

e.k*_*a.k 1 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
Run Code Online (Sandbox Code Playgroud)

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

Abh*_*rty 6

最好有一个 mysql 事件调度程序http://dev.mysql.com/doc/refman/5.7/en/create-event.html

作为第一步,您需要将调度程序激活为

SET GLOBAL event_scheduler = ON;

请注意,如果服务器重新启动,则需要重置上述内容,因此最好在默认 mysql 配置文件(通常为 /etc/my.cnf)的 [mysqld] 部分下的某处设置 event_scheduler=on,确保重新启动 mysql服务器

设置调度程序后,运行以下程序以查看其是否正常工作,您应该看到以下内容

show variables like '%event_scheduler%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | ON    |
+-----------------+-------+
Run Code Online (Sandbox Code Playgroud)

最后在终端上将调度程序写为

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 ;
Run Code Online (Sandbox Code Playgroud)

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