受TTL影响的MySQL记录

时间:2013-10-05 11:52:12

标签: mysql

是否有可能在MySQL数据库中创建一个受 TTL (生存时间)选项约束的记录。

我想制作一个简单的密码恢复功能,我需要存储一个激活密钥,该密钥只​​存储在数据库中3600秒,然后在此之后自动删除?我知道有很多其他方法可以实现这一点,但它们并不像 TTL 功能那样直接。

我猜MySQL没有这样的功能,但我只是想,也许我错过了一些东西,有吗?

2 个答案:

答案 0 :(得分:16)

我刚发现MySQL 5.1+有事件调度程序MySQL Event Scheduler管理事件的调度和执行 - 根据计划运行的任务。

存储例程需要MySQL数据库中的事件表。此表是在MySQL安装过程中创建的。

使用它的语法是:

CREATE EVENT
  ClearUserActivationCodes
ON SCHEDULE EVERY 1 DAY
DO
BEGIN
DELETE FROM
  user_activation_code
WHERE code_time_stamp < NOW()
END

它非常有用,完全满足我在不使用cron作业的情况下自动清除表格的需求。

答案 1 :(得分:3)

我个人会使用TIMESTAMP选项将密钥存储在DEFAULT CURRENT_TIMESTAMP字段中。

然后,在获取密钥时,检查时间戳。如果不到一个小时前,你就可以继续了。否则,将其视为无效并删除密钥(您还可以提供特定的错误消息,指出密钥已过期且用户需要新密钥)。

此外,使用每天运行一次的cron任务来删除超过一天的密钥。如果人们从未实际输入过,那么这可以确保您不会获得越来越多的过期代码。