@borisovdenis

Как протестировать исполнение процедуры по наступлению события в MySQL?

Всем, привет! Задача следующая. Есть таблица для хранения ключей активации для подтверждения регистрации пользователя. У этих ключей срок годности 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. Как протестировать событие?
  • Вопрос задан
  • 119 просмотров
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat Куратор тега MySQL
{PHP, MySql, HTML, JS, CSS} developer
DO BEGIN
    CALL delete_expired_activation_rows_and_related_users;
    //делаем инсерт в тестовую таблицу с таймстемпом
  END|
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы