Как создать событие mysql внутри процедуры или триггера?
Недавно я искал решение для следующей ситуации:
У меня есть MySQL таблица со структурой:
CREATE TABLE IF NOT EXISTS `battles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`active` tinyint(1) NOT NULL,
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
`begindate` datetime NOT NULL,
`enddate` datetime NOT NULL,
PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
Каждая битва имеет начало и конец. Begindate - это дата вставки, а обычно enddate - через три дня.
Я хотел бы создать событие mysql, которое останавливает битву (устанавливает active = 0) в конце битвы. И я хотел бы, чтобы это событие было создано по триггеру вставки в таблице сражений.
Есть связанная проблема с очень немногими ответами (Вот).
Они советуют:
Вы должны быть в состоянии сделать это с помощью триггера и планировщика событий:
создать триггер на таблице, который срабатывает при каждом обновлении / вставкеэтот триггер создает запланированное событие, которое происходит во время строки и обновляет> вторую таблицуЯ пытался создать такой запрос, но безуспешно.
DELIMITER |
DROP TRIGGER IF EXISTS battle_create_end|
CREATE TRIGGER battle_create_end AFTER INSERT ON battles
FOR EACH ROW BEGIN
CREATE EVENT IF NOT EXISTS CONCAT('battle_end_',NEW.id)
ON SCHEDULE AT NEW.enddate
DO
UPDATE battles SET battles.active = 0 WHERE battles.id = NEW.id;
END|
DELIMITER ;
Я получаю ошибку
1576 - Рекурсия утверждений DDL о СОБЫТИИ запрещена, когда присутствует тело
Я пробовал с разными разделителями в каждой структуре строк, но безуспешно.
Если кто-то может помочь, пожалуйста, сообщите.
БР, Илько