Всем, привет! Задача следующая. Есть таблица для хранения ключей активации для подтверждения регистрации пользователя. У этих ключей срок годности 2 дня. Нужно удалять пользователя, который не активировал свой аккаунт в течении 2 дней. Я для этого создал процедуру. Вот:
CREATE PROCEDURE `delete_expired_activation_rows_and_related_users`()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE usrid, eaid INT;
DECLARE eadate DATE;
DECLARE cur CURSOR FOR SELECT id, user_id, date FROM intodayer.intodayer2_app_emailactivation;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur;
REPEAT
FETCH cur INTO eaid, usrid, eadate;
IF TO_DAYS(NOW()) - TO_DAYS(eadate) > 2 THEN
DELETE FROM intodayer.intodayer2_app_customuser WHERE id = usrid;
END IF;
UNTIL done END REPEAT;
CLOSE cur;
END
И соответствующее событие, которое будет вызывать эту процедуру каждый день.
delimiter |
CREATE EVENT delete_expired_email_activation_event
ON SCHEDULE
EVERY 1 DAY
DO BEGIN
CALL delete_expired_activation_rows_and_related_users;
END|
delimiter ;
Вот описание события.
[
{
"EVENT_CATALOG" : "def",
"EVENT_SCHEMA" : "intodayer",
"EVENT_NAME" : "delete_expired_email_activation_event",
"DEFINER" : "root@localhost",
"TIME_ZONE" : "SYSTEM",
"EVENT_BODY" : "SQL",
"EVENT_DEFINITION" : "BEGIN\n\t CALL delete_expired_activation_rows_and_related_users;\n\tEND",
"EVENT_TYPE" : "RECURRING",
"EXECUTE_AT" : null,
"INTERVAL_VALUE" : "1",
"INTERVAL_FIELD" : "DAY",
"SQL_MODE" : "STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",
"STARTS" : "2017-08-30 11:32:15",
"ENDS" : null,
"STATUS" : "ENABLED",
"ON_COMPLETION" : "NOT PRESERVE",
"CREATED" : "2017-08-30 11:32:15",
"LAST_ALTERED" : "2017-08-30 11:32:15",
"LAST_EXECUTED" : "2017-08-30 11:32:15",
"EVENT_COMMENT" : "",
"ORIGINATOR" : 1,
"CHARACTER_SET_CLIENT" : "utf8",
"COLLATION_CONNECTION" : "utf8_general_ci",
"DATABASE_COLLATION" : "utf8_general_ci"
}
]
Процедуру протестировал вроде работает. Тестировал просто изменением даты на компе. Но как протестировать событие?
В итоге 2 вопроса:
1. Правильно ли я все реализовал?
2. Как протестировать событие?