1

我正在为 MySQL 数据库编写一些表,在这些表中,我有几个只需要几个星期的条目。

例如:

create table LoginAttempts (
ReferenceId int unsigned auto_increment not null,
UserId smallint unsigned not null,
EventTime timestamp not null...)

现在我不需要永远保留用户登录尝试的记录,所以我计划在 30 天后删除它们。显然我需要这个操作自动发生。我最初的想法是向该表添加一个触发器,该触发器将在每次对表进行条目时运行。基本上,它只是将每一行的时间戳与当前时间戳进行比较——如果超过 30 天,则该行将被删除。

但是,我担心可能会影响性能。这种方法,至少在我看来,似乎效率低下。应该有更好的方法。那么,我怎样才能以更好的方式实现我想做的事情——如果有的话?

4

1 回答 1

2

为此使用 cron 作业或MySql 事件

如果您使用 mysql 事件,您将创建一个这样的事件

CREATE EVENT event_name
ON SCHEDULE EVERY 1 DAY
DO
   DELETE 
     FROM LoginAttempts 
    WHERE DATEDIFF(CURDATE(), DATE(EventTime)) > 30;

用于SHOW PROCESSLIST检查是否启用了事件调度程序。如果它打开,您应该看到Daemon用户“ ”的进程“ event_scheduler”。SET GLOBAL event_scheduler = ON;如果当前未启用,则用于启用调度程序。有关在此处配置事件调度程序的更多信息

于 2013-06-09T07:22:37.747 回答