是否有可能在 MySQL 数据库中创建一条受TTL(生存时间)选项影响的记录。
我想做一个简单的密码恢复功能,我需要存储一个激活密钥,它会在数据库中存储仅 3600 秒,然后在此之后自动删除?我知道还有很多其他方法可以实现这一点,但它们不像TTL功能的想法那么简单。
我猜 MySQL 没有这样的功能,但我只是想也许我错过了一些东西并且有吗?
是否有可能在 MySQL 数据库中创建一条受TTL(生存时间)选项影响的记录。
我想做一个简单的密码恢复功能,我需要存储一个激活密钥,它会在数据库中存储仅 3600 秒,然后在此之后自动删除?我知道还有很多其他方法可以实现这一点,但它们不像TTL功能的想法那么简单。
我猜 MySQL 没有这样的功能,但我只是想也许我错过了一些东西并且有吗?
我刚刚发现 MySQL 5.1+ 有event scheduler。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 作业的情况下自动清表的需求。
就我个人而言,我会使用该选项将密钥与TIMESTAMP
字段一起存储。DEFAULT CURRENT_TIMESTAMP
然后,在获取密钥时,检查时间戳。如果不到一个小时前,那么你可以继续。否则,将其视为无效并删除密钥(您还可以提供特定的错误消息,说明密钥已过期并且用户需要一个新的)。
此外,使用每天运行一次的 cron 任务来删除超过一天的密钥。如果人们从未真正输入过过期代码,这可以确保您不会得到越来越多的过期代码。