недавно я искал решение для следующей ситуации:
У меня есть таблица 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 - это дата и время вставки, и обычно конец - через три дня.
Я хотел бы создать событие 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 EVENT запрещена при наличии тела
Я пытался сРазличные разделители в каждой структуре строк также не имеют успеха.
Если кто-то может помочь, пожалуйста, сообщите.
BR, Ilko