29/8/2017
Eventos en MySQL (planificar tareas por fecha y hora) – DonnierocK
DonnierocK not affiliated with Kid Rock
Eventos en MySQL (planificar tareas por fecha y hora) EN ENER ENERO O 30, 30, 20 2013 13 /
POR DONN DONNIE IE ROC ROCK / EN INFO INFORM RMÁ ÁTIC TICA, SQL
Seas un dba o seas un programador (y yo en mi caso soy ambas cosas) la automatización de tareas es algo no sólo útil, sino a veces indispensable indispensable. Al estilo de los cron jobs de Linux MySQL nos ofrece la posibilidad de definir una acción o serie de acciones que se repita periódicamente o se ejecuten en un momento concreto . Lo primero es habilitar a nuestro servidor MySQL para que pueda hacerlo , con la siguiente línea: 1
SET GLOBAL event_scheduler = ON;
Si usas PHPMyAdmin tienes por ahí un botón para activarlo, no necesitas comandos. Bueno, la sintaxis básica de la creación de eventos, y a la guía de siguiente: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
usuario de MySQL me remito , es la
CREATE
[DEFINER = { user user | | CURRENT_USER }] EVENT [IF NOT NOT EXISTS] EXISTS] event_name ON SCHEDULE schedule [ON COMPLETION [NOT [ NOT] ] PRESERVE] [ENABLE | DISABLE | DISABLE ON SLAVE] [COMMENT 'comment' 'comment'] ] DO sql_statement; schedule: AT timestamp [+ INTERVAL interval] ... | EVERY interval [STARTS timestamp [+ INTERVAL interval] ...] [ENDS timestamp [+ INTERVAL interval] ...]
interval: quantity {YEAR | QUARTER | MONT MONTH H | DAY DAY | | HOUR | MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
Ok, visto así, acojona. Pero no todos los parámetros son obligatorios, y explicado es fácil. Reamente necesitas sólo un nombre para el event_name , una condición para que se cumpla el ON SCHEDULE y un código sql que ejecutar después del DO. Te meto un ejemplillo sacado del curro, por ejemplo: 1 2 3 4 5 6 7
CREATE EVENT `close_expired_campaigns` ON SCHEDULE EVERY 1 DAY DAY STARTS STARTS '2013-01-21 00:00:01' NOT PRESERVE PRESERVE ENABLE ON COMPLETION NOT DO update tabla tabla = 0 set valido = 0 where
DATE_ADD(fechaCreacion, INTERVAL 45 DAY DAY)
Tiene algo más de código porque lo genera automáticamente PHPMyAdmin pero la idea es que crea un evento con ese nombre que, cada día un segundo después d e medianoche actualice la tabla seleccionada poniendo a cero la columna indicada cuando se cumpla una condición (en este caso, que hayan pasado 45 días desde la creación). Bueno, como el código es tocho, os pongo debajo un ejemplo con la sintaxis más básica posible . Imaginemos una funcion que actualiza el s aldo de una cuenta diaria de gastos a 1000 euros: 1 2 3
CREATE EVENT e_ActualizaSaldoDiario DAY STARTS STARTS ‘2013-01-01 00:00:00’ ON SCHEDULE EVERY 1 DAY DO UPDATE gastos SET saldo = 1000
Los dos ejemplos son recurrentes , se ejecutan todos los días a una hora (el parámetro Starts no permite definir el momento en que comenzar á a ejecutarse, acuérdate de ponerlo porque si pones solo EVERY 1 DAY debería debería fallar, y no tiene por qué ser cada día, puedes poner un periodo concreto de horas, minutos, días, semanas…). Existe la posibilidad de que un evento se ejecute sólo una vez , en el momento que le indiques y luego se borre. Por ejemplo imaginemos que quieres que dentro de 6 horas se borren todos los registros del año 2012: https://donnierock.com/2013/01/30/eventos-en-mysql-planificar-tareas-fecha/
1/3
29/8/2017
1 2 3
Eventos en MySQL (planificar tareas por fecha y hora) – DonnierocK
CREATE EVENT e_Borra2012 ON SCHEDULE AT now() + INTERVAL 6 HOUR DO DELETE cuentas WHERE year = 2012
Y en estos tres ejemplos sólo hemos utilizado sentencias de SQL simples , pero imagina la potencia (y los riesgos de joderlo todo si la cagas, claro está) si los combinamos con procedimientos almacenados y con disparadores… Me imagino una bombillita alumbrando tu cabeza, y todas las cuestiones de mantenimiento y actualización que se te están ocurriendo. AUTOMATIZACIÓN DE TAREAS
MYSQL
SQL
14 comentarios en “Eventos en MySQL (planificar tareas por fecha y hora)” 1. Yova Turnes (@yovantichrist) MUY interesante
ENERO 30, 2013 A LAS 13:42 RESPONDER
2. Ing. Ismael Romero Muchas gracias, muy útil y resumido
DICIEMBRE 27, 2014 A LAS 23:14 RESPONDER 3. bladdi
GRACIAS
ABRIL 18, 2015 A LAS 17:42 RESPONDER
JUNIO 4, 2015 A LAS 22:37 RESPONDER
4. Elkin Bernal Martinez Muy agradecido por tomarte el tiempo de explicar!! Saludos.. 5. Miguel Hola:
¿como podría borrar estos eventos? Gracias
SEPTIEMBRE 16, 2015 A LAS 08:12 RESPONDER Donnie Rock He hecho una minientrada sobre eso para contestarte: hps://donnierock.com/2015/09/16/borrar-un-evento-de-mysql/
SEPTIEMBRE 16, 2015 A LAS 13:46 RESPONDER
1. David Flores drop event NombreEvento
MAYO 20, 2017 A LAS 23:10 RESPONDER 6. Eduardo Prieto
Excelente, me funciono de pelos el segundo ejemplo –> solo que el nombre va sin apostrofes. Muchas gracias por el aporte. Saludos.
OCTUBRE 2, 2015 A LAS 15:09 RESPONDER
7. Pingback: Eventos en MySQL (planificar tareas por fecha y hora) – DonnierocK - Probando Wio Link 8. Luis Me gustaria saber como harias un backup de todas las bases del servidor y que las guarde dentro del servidor web
JULIO 28, 2016 A LAS 11:38 RESPONDER
9. Margarita Mota Muchas gracias sencillo de entender
OCTUBRE 27, 2016 A LAS 09:45 RESPONDER 10. javier
Hola, queria saber. Si quiero actualizar automaticamente el estado de un usuario que lleva mas de 15 dias con un libro (el prestamo se almacena en una tabla a parte) como puedo hacer?
ENERO 23, 2017 A LAS 18:09 RESPONDER 1. Gustavo
Puedes crear un trigger, es más efectivo que un job.
ENERO 27, 2017 A LAS 15:05 RESPONDER
https://donnierock.com/2013/01/30/eventos-en-mysql-planificar-tareas-fecha/
2/3
29/8/2017
Eventos en MySQL (planificar tareas por fecha y hora) – DonnierocK
1. David Flores Un trigger no se puede ejecutar a una espècifica de forma independiente tendría que ocurrir un evento INSERT UPDATE o DELETE . Imaginate que quisieras que se actualice tus datos a 00:00:00 todos los dias tedrias que provocar una insercion delete o un update a esa hora todos los dias de por vida y esos si tienes un solo evento generalmente son varios eventos y es mas podria no ser tu unica base de datos seria peor imaginate un Trigger es una cosa y un evento es otra cada uno por su lado no
MAYO 20, 2017 A LAS 23:20 BLOG DE WORDPRESS.COM.
https://donnierock.com/2013/01/30/eventos-en-mysql-planificar-tareas-fecha/
3/3