Programador de eventos o establecer un temporizador en MySQL
-
MySQL
Event
y su importancia - Programador de eventos o establecer un temporizador en MySQL
- Conclusión
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:
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.
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).
EVENT
pero dar un nombre único. Los nombres únicos de los eventos facilitarán su trabajo si tiene muchos eventos.Producción:
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.
Utilice el siguiente código para ver cuántos eventos se crean y programan.
SHOW EVENTS FROM classicmodels;
Producción:
¿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.