¿Cómo crear un evento mysql dentro de un procedimiento o disparador?
recientemente he estado buscando una solución para la siguiente situación:
Tengo una tabla mysql con estructura:
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 ;
Cada batalla tiene fecha de inicio y finalización. La fecha de inicio es la fecha y hora de la inserción y, por lo general, la fecha de finalización es tres días después.
Me gustaría crear un evento mysql que detenga la batalla (conjuntos activos = 0) en la fecha final de la batalla. Y me gustaría que este evento se creara en el disparador de inserción en la tabla de batallas.
Hay un problema relacionado con muy pocas respuestas aqu).
Ellos aconsejan:
Debería poder hacerlo utilizando un activador y el programador de eventos:
crear un activador en la tabla que se activa en cada actualización / insercióneste disparador crea un evento programado que ocurre en la fecha y hora de la fila y actualiza> su segunda tablaHe intentado crear una consulta de este tipo pero sin éxito.
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 ;
El error que obtengo es
1576 - La recurrencia de las declaraciones DDL de EVENT está prohibida cuando el cuerpo está presente
He intentado con diferentes delimitadores en la estructura de cada fila sin éxito tampoco.
Si alguien puede ayudar, por favor avise.
BR, Ilko