2013-10-05 2 views
6

Возможно ли создать запись в базе данных MySQL, которая будет подвержена TTL (Время жить).Запись MySQL, которая будет подвержена TTL

Я хочу создать простую функцию восстановления пароля, и мне нужно сохранить ключ активации, который будет храниться в базе данных всего 3600 секунд, а затем автоматически удаляться после этого времени? Я знаю, что есть множество других способов добиться этого, но они не так прямолинейны, как идея TTL функциональность.

Я предполагаю, что у MySQL нет такой функциональности, но я просто подумал, что, может быть, я что-то упустил и есть?

+0

Вы писали: «Я предполагаю, что у MySQL нет такой функциональности». Ваша догадка правильная. –

ответ

11

Я только узнал, что 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 

Это весьма полезно и полностью удовлетворяет мои потребности для автоматической очистки таблиц без использования хрон рабочих мест.

+1

У меня были синтаксические ошибки, используя пример кода. Я могу выполнить его без ошибок после удаления операторов 'BEGIN' и' END'! :) – renatoargh

2

Лично я бы сохранил ключ с полем TIMESTAMP, используя опцию DEFAULT CURRENT_TIMESTAMP.

Затем, извлекая ключ, отметьте метку времени. Если это меньше часа назад, тогда вы в порядке. В противном случае считайте его недействительным и удалите ключ (вы также можете указать конкретное сообщение об ошибке, в котором указано, что срок действия ключа истек, а пользователю нужен новый).

Кроме того, используйте задачу cron, выполняемую один раз в день, чтобы удалить ключи, которые старше одного дня. Это гарантирует, что вы не получите растущую кучу устаревших кодов, если люди никогда не будут входить в них.

+1

Да, да, я знаю все об этом! Я бы сделал то же самое! Но, если это так, как встроенная функциональность, было бы здорово, я думаю! –

+0

Честно говоря, я не думаю, что это было бы здорово. Возможность предоставления пользовательского сообщения об ошибке для кодов, срок действия которых истек, был бы очень полезен и удобен для пользователя. –

+0

Согласен, тогда у вас не было бы таких способностей. Но помимо * ключа активации * есть много разных ситуаций, когда вам может понадобиться запись, зависящая от TTL. –

Смежные вопросы