A partir de la versión 5.1, MySQL añade el concepto de eventos. Un evento no es más que una tarea la cual se ejecuta de forma automática en un momento previamente programado. Si eres un usuarios Linux puedes ver a los eventos cómo los cron jobs .
Los eventos nos permitirán a nosotros cómo administradores de base de datos programar ciertas tareas las cuales queremos que se ejecuten de forma periódica o en un momento en concreto, de tal manera que podamos automatizar ciertos procesos.
Ejemplos
Para este tutorial me apoyaré de mi tabla test.
CREATE TABLE test(
evento VARCHAR(50),
fecha DATETIME
);
Lo primero que debemos de hacer es habilitar nuestro servidor para que pueda ejecutar eventos.
SET GLOBAL event_scheduler = ON;
Posteriormente creamos nuestro evento; En mi caso, tendrá el nombre de insertion event. Este evento se ejecutará dentro de 1 min, y lo que hará, será insertar un registro en mi tabla.
CREATE EVENT insertion_event
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
DO INSERT INTO test VALUES ('Evento 1', NOW());
El nombre del evento no debe de poseer más de 64 caracteres.
Si queremos que el evento se ejecute en una fecha en concreto, únicamente debemos de especificarlo en ON SCHEDULE AT. Recuerda, el formato es año-mes-día hora:minuto:segundo.
ON SCHEDULE AT '2018-12-31 12:00:00'
Si nuestro evento ejecutará más de una sentencia SQL debemos de apoyarnos de BEGIN y END.
DELIMITER //
CREATE EVENT insertion_event
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
DO
BEGIN
INSERT INTO test VALUES ('Evento 1', NOW());
INSERT INTO test VALUES ('Evento 2', NOW());
INSERT INTO test VALUES ('Evento 3', NOW());
END //
DELIMITER ;
Una vez el evento se haya creado, nosotros podemos listarlo.
SHOW events\G;
Si queremos eliminar un evento haremos uso de DROP.
DROP EVENT nombre_evento;
Es importante mencionar que una vez el evento haya expirado, este, será eliminado de forma automática. Si nosotros no queremos que esto ocurra debemos de apoyarnos de ON COMPLETION
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
ON COMPLETION PRESERVE
...
Algo común con los eventos es trabajar con store procedures.
CREATE EVENT nombre_evento
ON SCHEDULE AT 'fecha de ejeución'
DO
CALL store_procedure();
Eventos periódicos.
Los eventos los podemos programar para que se ejecuten de forma periódica.
CREATE EVENT insertion_event
ON SCHEDULE EVERY 1 MINUTE STARTS '2018-07-07 18:30:00'
DO INSERT INTO test VALUES ('Evento 1', NOW());
En esta ocasión, el evento se ejecuta cada minuto después de las 6:30 PM. Podemos programar la ejecución para cada segundo, minuto, hora, semana, mes o año.
Si nosotros queremos que el evento se ejecute entre un rango de fechas debemos de apoyarnos de ENDS.
CREATE EVENT insertion_event
ON SCHEDULE EVERY 1 MINUTE STARTS '2018-07-07 18:30:00'
ENDS '2018-07-07 19:00:00'
DO INSERT INTO test VALUES ('Evento 1', NOW());
Ahora, el evento se ejecuta durante un periodo de 30 minutos (De 6:30 PM a 7:00 PM).
Editar eventos
Si por alguna razón necesitamos detener un evento, lo que debemos de hacer es deshabilitarlo.
ALTER EVENT nombre_evento
DISABLE;
Para habilitar nuevamente un evento colocamos ENABLE.
ALTER EVENT nombre_evento
ENABLE;
Detener eventos
Para detener completamente todos los eventos, debemos de ejecutar la siguiente sentencia.
SET GLOBAL event_scheduler = OFF;
Estructura de un evento
Los eventos en MySQL pueden ser tan complejos como nosotros los deseemos.
CREATE
[DEFINER = { user | CURRENT_USER }]
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'string']
DO event_body;
schedule:
AT timestamp [+ INTERVAL interval] ...
| EVERY interval
[STARTS timestamp [+ INTERVAL interval] ...]
[ENDS timestamp [+ INTERVAL interval] ...]
interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
-
Módulo 1 | 8 clases
Introdución
expand_more-
play_circle_outline
Clase 1
Introducción
-
play_circle_outline
Clase 2
¿Qué son las bases de datos?
-
play_circle_outline
Clase 3
Modelo relacional
-
play_circle_outline
Clase 4
Lenguaje SQL
-
play_circle_outline
Clase 5
Instalación MySQL windows
-
play_circle_outline
Clase 6
Instalación MySQL Linux
-
play_circle_outline
Clase 7
Instalación MySQL Mac OS
-
play_circle_outline
Clase 8
Restablecer contraseña root MySQL
-
-
Módulo 2 | 3 clases
Servidor de base de datos
expand_more -
Módulo 3 | 10 clases
Base de datos y tablas
expand_more-
play_circle_outline
Clase 1
Crear tablas
-
play_circle_outline
Clase 2
Tipos de datos
-
play_circle_outline
Clase 3
Listar y eliminar tablas
-
play_circle_outline
Clase 4
Obtener información de una tabla
-
play_circle_outline
Clase 5
Crear tablas a partir de otras
-
play_circle_outline
Clase 6
Insertar registros
-
play_circle_outline
Clase 7
Insertar múltiples registros
-
play_circle_outline
Clase 8
Ejecutar archivos .SQL
-
play_circle_outline
Clase 9
Condicionar sentencias
-
play_circle_outline
Clase 10
Consultas rápidas
-
-
Módulo 4 | 8 clases
Restricciones
expand_more-
play_circle_outline
Clase 1
Restricciones
-
play_circle_outline
Clase 2
Valores únicos y nulos
-
play_circle_outline
Clase 3
Valores por defualt
-
play_circle_outline
Clase 4
Números positivos
-
play_circle_outline
Clase 5
Tipo Enum
-
play_circle_outline
Clase 6
Llaves primarias
-
play_circle_outline
Clase 7
Llaves Foraneas
-
play_circle_outline
Clase 8
Implementación de restricciones
-
-
Módulo 5 | 2 clases
Modificar tablas
expand_more -
Módulo 6 | 12 clases
Sentencias basicas
expand_more-
play_circle_outline
Clase 1
¿Cómo se ejecutan las sentencias SQL?
-
play_circle_outline
Clase 2
Obtener registros mediante condiciones
-
play_circle_outline
Clase 3
Operadores lógicos
-
play_circle_outline
Clase 4
Registros nulos
-
play_circle_outline
Clase 5
Registros mediante rangos
-
play_circle_outline
Clase 6
Búsqueda por listas
-
play_circle_outline
Clase 7
Registros unicos
-
play_circle_outline
Clase 8
Alías
-
play_circle_outline
Clase 9
Actualizar registros
-
play_circle_outline
Clase 10
Eliminar registros
-
play_circle_outline
Clase 11
Eliminación en cascada
-
play_circle_outline
Clase 12
Restaurar definición de una tabla
-
-
Módulo 7 | 8 clases
Funciones
expand_more-
play_circle_outline
Clase 1
Funciones en SQL
-
play_circle_outline
Clase 2
Funciones sobre strings
-
play_circle_outline
Clase 3
Funciones sobre números
-
play_circle_outline
Clase 4
Funciones sobre fechas
-
play_circle_outline
Clase 5
Funciones sobre condiciones
-
play_circle_outline
Clase 6
Crear función
-
play_circle_outline
Clase 7
Listar funciones
-
play_circle_outline
Clase 8
Ejecutar sentencias dentro de funciones
-
-
Módulo 8 | 12 clases
Sentencias avanzadas
expand_more-
play_circle_outline
Clase 1
Búsqueda mediante strings
-
play_circle_outline
Clase 2
Expresiones regulares
-
play_circle_outline
Clase 3
Ordenar registros
-
play_circle_outline
Clase 4
Limitar registros
-
play_circle_outline
Clase 5
¿Qué son las funciones de agreación?
-
play_circle_outline
Clase 6
Funciones de agregación
-
play_circle_outline
Clase 7
Agrupamiento
-
play_circle_outline
Clase 8
Condiciones bajo agrupamiento
-
play_circle_outline
Clase 9
Unir resultados
-
play_circle_outline
Clase 10
Sub consultas
-
play_circle_outline
Clase 11
Validar registros
-
play_circle_outline
Clase 12
Ejercicios
-
-
Módulo 9 | 7 clases
Joins
expand_more-
play_circle_outline
Clase 1
Trabajo con múltiples tablas
-
play_circle_outline
Clase 2
Inner join
-
play_circle_outline
Clase 3
Sub clausula using
-
play_circle_outline
Clase 4
Left Join
-
play_circle_outline
Clase 5
Right Join
-
play_circle_outline
Clase 6
Múltiples joins
-
play_circle_outline
Clase 7
Productos cartesianos
-
-
Módulo 10 | 4 clases
Vistas
expand_more -
Módulo 11 | 7 clases
Procedimientos
expand_more-
play_circle_outline
Clase 1
Procedimientos almacenados
-
play_circle_outline
Clase 2
Crear procedimientos
-
play_circle_outline
Clase 3
Eliminar procedimientos
-
play_circle_outline
Clase 4
Obtener valores
-
play_circle_outline
Clase 5
Condicionales
-
play_circle_outline
Clase 6
Casos
-
play_circle_outline
Clase 7
Ciclos
-
-
Módulo 12 | 4 clases
Transacciones
expand_more -
Módulo 13 | 5 clases
Extras
expand_more -
Módulo 14 | 5 clases
Triggers
expand_more -
check_circle_outlineMódulo 15
Examen del curso
expand_more-
done_all
Examen
Examen final del curso
-
