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)
编辑:忘了提,我希望旧行的删除是自动的,并且每周至少运行一次。
最好有一个 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)
在上面的示例中,它将删除超过一个月的记录,您可以拥有自己的值。