Introducción
Los eventos de MySQL son tareas que se ejecutan según un programa definido por el usuario . El Programador de eventos es un subproceso especial que ejecuta los Eventos a una hora programada.
Los eventos de MySQL son útiles porque facilitan la administración de bases de datos y las tareas operativas periódicas de la base de datos.
En este tutorial, aprenderá qué son los eventos de MySQL y cómo configurarlos y usarlos.
Requisitos previos:
- Un sistema que ejecuta MySQL en un servidor de base de datos
- Cuenta de usuario MySQL con privilegios de root
¿Qué es el programador de eventos de MySQL?
MySQL Event Scheduler es un hilo que se ejecuta en segundo plano y gestiona la ejecución de eventos programados. El programador está en estado de suspensión a menos que la variable global event_scheduler
está configurado en ON
o 1
.
MySQL Event Scheduler representa la alternativa de MySQL al trabajo de Cron . Algunos beneficios del Programador de eventos son:
- Está escrito directamente en el servidor MySQL.
- Es independiente de la plataforma y la aplicación.
- Se puede usar siempre que se requiera una actualización o limpieza regular de la base de datos.
- Reduce el número de compilaciones de consultas.
Configuración del programador de eventos de MySQL
El estado del Programador de eventos de MySQL se puede configurar para establecer el Programador encendido , desactivado o deshabilitar eso.
Para verificar el estado del Programador de eventos, ejecute el siguiente comando:
SHOW processlist;
El event_scheduler
La variable del sistema que se muestra en el resultado muestra el estado del Programador de eventos. Aquí, el event_scheduler
el estado de la variable es Esperando en cola vacía , lo que significa que el Programador está encendido y esperando que un evento lo active.
Los estados posibles son:
ON
:El subproceso del Programador de eventos se está ejecutando y ejecuta todos los eventos programados. Este es el estado predeterminado del Programador. Si el Programador estáON
, laSHOW processlist
la salida del comando lo muestra como un proceso daemon.
Para activar el programador de eventos ON
, ejecute el siguiente comando:
SET GLOBAL event_scheduler = ON;
El valor ON
es intercambiable con 1
.
OFF
:El subproceso del programador de eventos no se está ejecutando y no aparece en la salida deSHOW processlist
. Si el programador de eventos está configurado enOFF
, los eventos programados no se ejecutan.
Para desactivar el programador de eventos OFF
, ejecute el siguiente comando:
SET GLOBAL event_scheduler = OFF;
El valor OFF
es intercambiable con 0
.
DISABLED
:Este estado significa que el Programador de eventos no está operativo. El subproceso no se ejecuta y no aparece en la salida deSHOW processlist
comando.
Para deshabilitar el Programador de eventos, agregue la siguiente opción de línea de comandos al iniciar el servidor:
--event-scheduler=DISABLED
Programación de eventos MySQL
Un evento es un objeto de base de datos que contiene instrucciones SQL ejecutadas en un momento específico o en intervalos regulares. Los eventos comienzan y terminan en una fecha y hora específicas.
Dado que los eventos de MySQL se ejecutan en el momento que especifica el usuario, estos eventos también se denominan temporales. desencadenantes . Sin embargo, no deben confundirse con MySQL Triggers, que son objetos de base de datos que se ejecutan en respuesta a eventos específicos. Por lo tanto, es mejor usar el término eventos al referirse a tareas programadas para evitar confusiones.
Las siguientes secciones tratan sobre cómo crear , mostrar , cambiar o eliminar eventos.
Crear nuevos eventos
Para crear un nuevo evento, utilice la siguiente sintaxis:
CREATE EVENT [IF NOT EXIST] event_name
ON SCHEDULE schedule
DO
event_body
El IF NOT EXIST
La instrucción se asegura de que el nombre del evento sea único para la base de datos en uso. Especifique un nombre de evento único en lugar de event_name
sintaxis. El cronograma para ejecutar el evento se especifica después de ON SCHEDULE
declaración. El evento puede ser un evento único o un evento recurrente .
Introduzca instrucciones SQL en lugar de event_body
sintaxis después de DO
palabra clave. El cuerpo del evento puede contener procedimientos almacenados, consultas individuales o declaraciones compuestas. Escriba declaraciones compuestas dentro de un BEGIN END
bloquear.
Programar eventos
Los eventos se pueden programar para una ejecución posterior o para una ejecución periódica.
Evento único
Un evento único se ejecuta solo una vez y luego se elimina automáticamente.
Para crear un evento único, especifique la marca de tiempo después de ON SCHEDULE
declaración usando la siguiente sintaxis:
AT timestamp + [INTERVAL interval]
Las opciones posibles para intervalo son:
- AÑO
- TRIMESTRE
- MES
- DÍA
- HORA
- MINUTO
- SEMANA
- SEGUNDO
- AÑO_MES
- DÍA_HORA
- DÍA_MINUTO
- DÍA_SEGUNDO
- HORA_MINUTO
- HORA_SEGUNDO
- MINUTO_SEGUNDO
La marca de tiempo debe ser DATETIME
o TIMESTAMP
valor en el futuro. Para especificar una hora exacta, agregue un intervalo a la marca de tiempo usando + INTERVAL
, un entero positivo y una de las opciones de intervalo. Tenga en cuenta que esto solo se aplica cuando se usa CURRENT_TIMESTAMP
función.
Por ejemplo:
Aquí, el evento ocurre dos días después de su creación y la tarea es soltar una tabla llamada test .
Los eventos se eliminan automáticamente después de la ejecución. Si desea guardar el evento en la base de datos, agregue ON COMPLETION PRESERVE
cláusula al crear el evento.
Evento recurrente
Un evento recurrente ocurre repetidamente en un momento específico. Para programar un evento recurrente, use la siguiente sintaxis después de ON SCHEDULE
declaración:
EVERY interval
STARTS timestamp [+ INTERVAL]
ENDS timestamp [+ INTERVAL]
Los STARTS
La palabra clave especifica cuándo comienza la ejecución del evento, mientras que ENDS
La palabra clave especifica cuándo se detiene la ejecución del evento.
Por ejemplo:
Este evento hace que MySQL elimine la prueba de la tabla una vez cada seis meses, comenzando de inmediato.
También puede especificar un intervalo para iniciar el evento más tarde. Por ejemplo:
También puede especificar la hora de inicio y la hora de finalización del evento:
Este evento hace que MySQL suelte la tabla llamada test una vez cada seis meses durante cinco años, a partir de cinco días a partir de ahora.
Mostrar eventos
El siguiente comando muestra todos los eventos almacenados en la base de datos:
SHOW EVENTS FROM database_name;
Tenga en cuenta que los eventos únicos se eliminan automáticamente después de la ejecución y no se muestran en la salida de SHOW EVENTS
comando, a menos que use el comando ON COMPLETION PRESERVE
cláusula al crear el evento.
La salida enumera todos los eventos almacenados en la base de datos especificada.
Eventos de cambio
Usa el ALTER EVENT
declaración para cambiar un evento existente:
ALTER EVENT event_name
[ ON SCHEDULE schedule ]
[ RENAME TO new_event_name ]
[ ON COMPLETION [ NOT ] PRESERVE ]
[ COMMENT 'comment' ]
[ ENABLED | DISABLED ]
[ DO sql_statement ]
El event_name
debe ser un evento que ya existe. Todas las declaraciones después de ALTER EVENT
son opcionales, dependiendo de lo que desee cambiar. Omitir cualquier cláusula en ALTER EVENT
comando significa que permanecen en su estado anterior. Cualquier cláusula incluida significa que se aplican los nuevos valores que especifique.
Por ejemplo:
En este ejemplo, cambiamos el nombre del evento y cambiamos su declaración SQL.
Eliminar eventos (eliminar evento)
Para eliminar (soltar) un evento, utilice la siguiente sintaxis:.
DROP EVENT [IF EXISTS] event_name;
Por ejemplo:
Esta acción borra permanentemente el evento de la base de datos.
Usando el IF EXISTS
declaración emite una advertencia si tal evento no existe:
Limitaciones de eventos de MySQL
Hay ciertas limitaciones a tener en cuenta al usar MySQL Events. Algunos de ellos son:
- Los eventos no pueden devolver un conjunto de resultados. La salida se dirige a dev/null y el evento falla o se realiza correctamente sin notificar al usuario.
- Los nombres de los eventos no distinguen entre mayúsculas y minúsculas. Dos eventos no pueden tener el mismo nombre con mayúsculas y minúsculas diferentes.
- Los eventos no se pueden programar más allá del 19 de enero de 2038, el máximo que se puede representar en la época de Unix.
- Los eventos no pueden ser creados, descartados o alterados por otro programa, activador o evento almacenado.
- Los eventos no pueden crear, descartar ni alterar programas o disparadores almacenados.
- Los intervalos
MONTH
,YEAR_MONTH
,QUARTER
yYEAR
se resuelven en meses. Todos los demás intervalos se resuelven en segundos. - Puede haber dos eventos con el mismo horario, pero no hay forma de forzar un orden de ejecución.
- Un evento siempre se ejecuta con privilegios de definidor. El hilo ejecuta el evento actuando como el usuario que creó el evento, con los privilegios de ese usuario. Tenga en cuenta que eliminar un usuario no elimina los eventos que el usuario creó.
- Los eventos no cambian el recuento de la ejecución de una declaración, lo que significa que no tiene efecto en
SHOW STATISTICS
comando. - El retraso máximo para ejecutar un evento es de dos segundos. Sin embargo, el information_schema.events la tabla siempre muestra la hora exacta de ejecución del evento.
- Utilice variables definidas por el usuario en lugar de referencias a variables locales dentro de declaraciones preparadas dentro de una rutina almacenada.
- El número de llamadas recursivas está limitado a
max_sp_recursion_depth
. Si esta variable es 0, que es el valor predeterminado, la recursividad está deshabilitada. - Use el
START TRANSACTION
declaración en lugar deBEGIN WORK
, desdeBEGIN WORK
se trata como el comienzo deBEGIN END
bloque. - Cualquier otra limitación de los procedimientos almacenados también se aplica a los eventos.