Vous êtes sur la page 1sur 3

29/8/2017 Eventos en MySQL (planificar tareas por fecha y hora) DonnierocK

DonnierocK

not aliated with Kid Rock

Eventos en MySQL (planificar tareas por fecha


y hora)

EN ENERO 30, 2013 / POR DONNIE ROCK / EN INFORMTICA, SQL


Seas un dba o seas un programador (y yo en mi caso soy ambas cosas) la automatizacin de tareas es
algo no slo til, sino a veces indispensable. Al estilo de los cron jobs de Linux MySQL nos ofrece
la posibilidad de denir una accin o serie de acciones que se repita peridicamente o se ejecuten
en un momento concreto.

Lo primero es habilitar a nuestro servidor MySQL para que pueda hacerlo, con la siguiente lnea:

1 SET GLOBAL event_scheduler = ON;

Si usas PHPMyAdmin tienes por ah un botn para activarlo, no necesitas comandos.

Bueno, la sintaxis bsica de la creacin de eventos, y a la gua de usuario de MySQL me remito, es la


siguiente:

1 CREATE
2 [DEFINER = { user | CURRENT_USER }]
3 EVENT
4 [IF NOT EXISTS]
5 event_name
6 ON SCHEDULE schedule
7 [ON COMPLETION [NOT] PRESERVE]
8 [ENABLE | DISABLE | DISABLE ON SLAVE]
9 [COMMENT 'comment']
10 DO sql_statement;
11
12 schedule:
13 AT timestamp [+ INTERVAL interval] ...
14 | EVERY interval
15 [STARTS timestamp [+ INTERVAL interval] ...]
16 [ENDS timestamp [+ INTERVAL interval] ...]
17
18 interval:
19 quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
20 WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
21 DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

Ok, visto as, acojona. Pero no todos los parmetros son obligatorios, y explicado es fcil. Reamente
necesitas slo un nombre para el event_name, una condicin para que se cumpla el ON SCHEDULE
y un cdigo sql que ejecutar despus del DO. Te meto un ejemplillo sacado del curro, por ejemplo:

1 CREATE EVENT `close_expired_campaigns`


2 ON SCHEDULE EVERY 1 DAY STARTS '2013-01-21 00:00:01'
3 ON COMPLETION NOT PRESERVE ENABLE
4 DO update tabla
5 set valido = 0
6 where
7 DATE_ADD(fechaCreacion, INTERVAL 45 DAY)<NOW() and valido=1;

Tiene algo ms de cdigo porque lo genera automticamente PHPMyAdmin pero la idea es que crea
un evento con ese nombre que, cada da un segundo despus de medianoche actualice la tabla
seleccionada poniendo a cero la columna indicada cuando se cumpla una condicin (en este caso, que
hayan pasado 45 das desde la creacin). Bueno, como el cdigo es tocho, os pongo debajo un ejemplo
con la sintaxis ms bsica posible. Imaginemos una funcion que actualiza el saldo de una cuenta
diaria de gastos a 1000 euros:

1 CREATE EVENT e_ActualizaSaldoDiario


2 ON SCHEDULE EVERY 1 DAY STARTS 2013-01-01 00:00:00
3 DO UPDATE gastos SET saldo = 1000

Los dos ejemplos son recurrentes, se ejecutan todos los das a una hora (el parmetro Starts no
permite denir el momento en que comenzar a ejecutarse, acurdate de ponerlo porque si pones
solo EVERY 1 DAY debera fallar, y no tiene por qu ser cada da, puedes poner un periodo concreto
de horas, minutos, das, semanas). Existe la posibilidad de que un evento se ejecute slo 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 ao 2012:
https://donnierock.com/2013/01/30/eventos-en-mysql-planificar-tareas-fecha/ 1/3
29/8/2017 Eventos en MySQL (planificar tareas por fecha y hora) DonnierocK

1 CREATE EVENT e_Borra2012


2 ON SCHEDULE AT now() + INTERVAL 6 HOUR
3 DO DELETE cuentas WHERE year = 2012

Y en estos tres ejemplos slo 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 actualizacin que se te estn ocurriendo.
AUTOMATIZACIN 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


4. Elkin Bernal Martinez
Muy agradecido por tomarte el tiempo de explicar!! Saludos..

JUNIO 4, 2015 A LAS 22:37 RESPONDER


5. Miguel
Hola:

como podra borrar estos eventos?

Gracias

SEPTIEMBRE 16, 2015 A LAS 08:12 RESPONDER


Donnie Rock
He hecho una minientrada sobre eso para contestarte:
h ps://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 (planicar 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 ms efectivo que un job.

ENERO 27, 2017 A LAS 15:05 RESPONDER

1. David Flores
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 espcica de forma independiente tendra 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

Vous aimerez peut-être aussi