Programador de eventos o establecer un temporizador en MySQL

Mehvish Ashiq 30 enero 2023
  1. MySQL Event y su importancia
  2. Programador de eventos o establecer un temporizador en MySQL
  3. Conclusión
Programador de eventos o establecer un temporizador en MySQL

Este tutorial lo guía sobre cómo crear un EVENT, también conocido como el temporizador MySQL.

Veremos cómo configurar un temporizador en MySQL para permitir que MySQL manipule datos (por ejemplo, los datos UPDATE/INSERT/DELETE). También hará una copia de seguridad en la fecha y hora mencionadas (si es necesario).

Veremos el EVENT de MySQL considerando diferentes escenarios. Además, discuta su importancia y beneficios. Para este artículo, estamos usando la versión 8.0.27 de MySQL, pero puede obtener la versión más reciente (si está disponible) en su sitio web oficial.

MySQL Event y su importancia

MySQL EVENT es una tarea utilizada para programar algunas operaciones, por ejemplo, actualizar las columnas, tomar las tablas o hacer una copia de seguridad de la base de datos.

Puede crear EVENTOS que se ejecutarán solo una vez o se repetirán según los intervalos dados, por ejemplo, cada minuto, cada hora, mes o año.

No hay un número fijo de sentencias para crear un EVENT. Puede tener muchas líneas dentro del cuerpo EVENT.

Si el EVENT tiene más de una línea, el cuerpo debe estar encerrado dentro de los bloques BEGIN y END. También es importante saber que los comandos EVENT programados se almacenan en la base de datos y se ejecutan en la DATE y la TIME programadas.

Crear un evento es importante por los siguientes beneficios:

  • Mantiene a todos en la misma página
  • Fija tus metas
  • Gestionar la programación y ejecutar los eventos.
  • Útil para optimizar tablas, actualizar datos
  • Genere informes útiles para las horas de menor actividad
  • Te permite priorizar tus tareas
  • Ahorra dinero y tiempo

Programador de eventos o establecer un temporizador en MySQL

Los retrasos son muy costosos tanto para el equipo de producción como para las marcas.

Programar el EVENT o configurar un temporizador para campos específicos (columnas) y luego volcarlos en un archivo separado para el informe del proyecto les ahorrará tiempo. De esta forma, les permitirá centrarse en otras tareas productivas.

MySQL usa un hilo llamado event_scheduler para ejecutar todos los eventos. Si el valor de event_scheduler es ON, solo entonces se ejecutará el EVENT; de lo contrario, no lo hará.

Tienes que usar el siguiente comando para establecer el valor de event_scheduler igual a ON.

SET GLOBAL event_scheduler = ON;

Ahora bien, si crea un EVENT, ¿cómo sabes que se ejecutará? Use el siguiente comando para ver.

SHOW PROCESSLIST;

Veamos la salida antes y después de establecer el valor de event_scheduler en ON.

En la primera salida no se puede ejecutar el EVENT, pero en la segunda salida sí. Esto se debe a que event_scheduler está ON para la segunda captura de pantalla.

Producción:

programador de eventos o establecer un temporizador en mysql - mostrar la parte de la lista de procesos a

programador de eventos o establecer un temporizador en mysql - mostrar la lista de procesos parte b

Puede crear el EVENT para diferentes propósitos; por ejemplo, el EVENT se ejecutará solo una vez o cada año, o una vez pero dentro de los intervalos establecidos. Comencemos a entender con la ayuda de un código de muestra.

Tenemos una tabla student en la base de datos person, que tiene los siguientes registros en el momento actual.

programador de eventos o establecer un temporizador en mysql - datos actuales en la tabla de estudiantes

Vamos a crear el siguiente EVENT para entender Evento único. El código de ejemplo se proporciona a continuación.

SET GLOBAL event_scheduler = ON;

CREATE EVENT IF NOT EXISTS ONE_TIME_EVENT
ON SCHEDULE AT CURRENT_TIMESTAMP
DO
INSERT INTO person.student (id, FIRST_NAME, LAST_NAME, GENDER, EMAIL)
VALUES 
(7, 'Thomas', 'Christoper', 'Male', 'tchristopher@gmail.com');

En el código anterior, establecemos el valor de event_scheduler en ON para ejecutar el EVENT.

Luego creamos un EVENT, lo llamamos ONE_TIME_EVENT y lo programamos en CURRENT_TIMESTAMP. Este EVENT representa que se ejecutará una vez en CURRENT_TIMESTAMP y luego expirará.

Este EVENT solo se creará si no existe. El trabajo de este EVENT es INSERT una fila en la tabla de students.

Después de crear y ejecutar este EVENT, comprueba la tabla student para ver el nuevo registro (ver la siguiente captura de pantalla).

Nota
Es posible dar cualquier nombre al EVENT pero dar un nombre único. Los nombres únicos de los eventos facilitarán su trabajo si tiene muchos eventos.

Producción:

programador de eventos o establecer un temporizador en mysql - datos actualizados en la tabla de estudiantes

Supongamos que tienes que crear un EVENT que se ejecutará después de 20 segundos del CURRENT_TIMESTAMP. Este evento también se ejecutará una sola vez. Escriba el siguiente código y comprenda.

CREATE EVENT IF NOT EXISTS ONE_TIME_EVENT_WITH_INTERVAL
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 20 SECOND
DO
INSERT INTO person.student 
VALUES 
(8, 'Suzu', 'Aly', 'Fmale', 'aly.suzu@yahoo.com');

Producción:

Puede ver el nuevo registro en la tabla student después de 20 segundos.

Ten en cuenta que no verás esta nueva fila en la tabla student si la consultas antes de 20 segundos. Deje pasar los veinte segundos y luego verifique.

programador de eventos o establecer un temporizador en mysql - datos actualizados después de veinte segundos en la tabla de estudiantes

Utilice el siguiente código para ver cuántos eventos se crean y programan.

SHOW EVENTS FROM classicmodels;

Producción:

programador de eventos o establecer un temporizador en mysql - lista de eventos

¿Por qué alguno de los EVENTOS no aparece en la captura de pantalla anterior? Porque todos nuestros eventos han expirado ahora, según este artículo.

Puede realizar un seguimiento de todos los eventos, tanto si han expirado como si no, utilizando la cláusula ON COMPLETION PRESERVE de la siguiente manera.

CREATE EVENT TEST_PRESERVE_CLAUSE
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
ON COMPLETION PRESERVE
DO
INSERT INTO tests(test_name,test_date)
VALUES('Testing Preserve Clause',NOW());

¿Qué sucede si desea crear un EVENT que comienza desde CURRENT_TIMESTAMP, se ejecuta cada MINUTO y expira después de una TIME? Se llama un Evento Recurrente.

Puedes crear y practicar usando el siguiente código.

CREATE EVENT RECURRING_EVENT
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
INSERT INTO Tests(test_name,test_date)
 VALUES('This is recurring event test',NOW());

En el código anterior, le decimos al EVENT que comience y finalice el tiempo usando STARTS y ENDS. También puede descartar el evento cuando crea que no es necesario ahora.

Reemplace el name con su nombre de EVENT en el siguiente código.

DROP EVENT [IF EXIST] name;

Tomemos otra situación en la que creó el EVENT y entregó el trabajo a otro desarrollador. ¿Sería fácil de entender sin COMENTARIO? Por supuesto que no.

Crea el EVENT y practica agregando COMENTARIO de la siguiente manera.

CREATE EVENT RECURRING_EVENT
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
COMMENT 'It will add a new record every minture for one hour'
DO
INSERT INTO Tests(test_name,test_date)
 VALUES('This is recurring event test',NOW());

Hemos aprendido el EVENT con una sola línea en el cuerpo EVENT. ¿Qué pasa si tienes varias líneas? Entendámoslo a través del siguiente código de ejemplo.

delimiter |
CREATE EVENT IF NOT EXISTS EVENT_FOR_UPDATE_COLUMNS_AND_DUMP
ON SCHEDULE AT current_timestamp
DO BEGIN
UPDATE student SET GENDER = 'M' WHERE student.GENDER = 'Male';
UPDATE student SET GENDER = 'F' WHERE student.GENDER = 'Female';
Table student INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/file.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n';   
END |
delimiter ;

Verá tres consultas en el cuerpo EVENT en el código provisto. Siempre que tenga más de una línea en el cuerpo EVENT, enciérrelas dentro de BEGIN y END como se indicó anteriormente.

Creamos un EVENT que comenzará desde CURRENT_TIMESTAMP en este ejemplo. Actualizará la columna GENDER de acuerdo con la sentencia UPDATE y exportará los datos a un archivo .CSV.

Para exportar, debe usar esta ruta C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/file.csv (si ha instalado MySQL en C Drive). De lo contrario, obtendrá el siguiente error.

Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

Si instaló MySQL en una ubicación diferente, use programador de EVENTOS, luego use el siguiente comando para encontrar la ruta donde se exportará su archivo.

SHOW VARIABLES LIKE "secure_file_priv";  

Conclusión

Hemos aprendido sobre el programador EVENT de MySQL en este tutorial.

Aprendimos cómo crear eventos que se ejecutarán una vez, según los intervalos proporcionados, solo una vez según el intervalo dado. También exploramos la creación de un evento con muchas líneas, actualizando los datos y luego exportándolos a un archivo separado.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook