【问题标题】:MySQL Triggers, deleting a row after inactivity?MySQL触发器,不活动后删除一行?
【发布时间】:2012-04-25 11:38:07
【问题描述】:

我已经进行了一些谷歌搜索,但无法真正获得很多相关信息。我正在尝试根据活动为要删除的某些行设置日期/时间。如果激活,除非再次激活,否则时间将推迟到以后。否则将被删除。在活动中激活(插入/更新)时,我已设法对行进行排序。

提前致谢。

【问题讨论】:

  • 你能定义活动记录吗?
  • 当然。 “活跃”是指最近更新/正在更新的一个。正在编辑“已更新”或正在将数据添加到行中。
  • 您是否考虑过运行 cron 作业来删除那些不活动的行?
  • 不,我没有,不过是个好主意。我现在就去试试这个。我也可以等到达到行限制(自己设置),然后删除表格下端的那些不活动的。谢谢!

标签: mysql sql triggers


【解决方案1】:

首先不要将此更新/删除放在触发器中,如果您有数百万行需要删除,您将看到插入/更新的性能受到巨大影响。这不是最好的地方。您可以按照 Filype 的建议创建一个 cron 作业。或者,如果您想将其全部保存在 MySQL 中,请使用 MySQL 事件调度程序。

转到此页面以阅读有关在 MySQL 中调度事件的更多信息: http://dev.mysql.com/doc/refman/5.1/en/events.html

MySQL Event 允许您定期在 MySQL 上安排事情。

代码看起来像

 CREATE EVENT myevent
 ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
 DO
  DELETE FROM MyTable Where Expired< NOW();

【讨论】:

  • 这非常适合您存储在数据库中的会话。我每 15 分钟运行一次以清除旧会话,以便我们可以锁定非活动用户。
【解决方案2】:

这是一个建议,我还没有尝试过,你可能会想用 deleted=1 更新行而不是实际删除记录。

CREATE TRIGGER deleteInactiveRecords AFTER UPDATE,INSERT ON myTable
    FOR EACH ROW BEGIN
        DELETE FROM myTable WHERE updated < (updated-((60)*60*24))
    END;

【讨论】:

  • 这行不通。 MySQL 触发器无法操作(DELETE、UPDATE、INERT,...)它们附加到的表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-02
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多