Activar el planificador de eventos.
Es un servicio o daemon que busca constantemente eventos a ejecutar.
Es necesario tanto para poder ejecutar tanto Eventos como Triggers.
Para saber si está activo debemos ejecutar:

Si aparece event_scheduler en la salida quiere decir que está activo.
También podemos podemos saber si está activo viendo el estado de la variable GLOBAL event_schedule:

Para activar/desactivar el planificador se utiliza:
SET GLOBAL event_scheduler=OFF;
Más información en la documentación:
https://dev.mysql.com/doc/refman/5.7/en/events-configuration.html
Eventos
Un evento es una tarea que se ejecuta de forma automática en un momento previamente programado. Tanto de forma periódica como en un momento en concreto.
El evento únicamente puede realizar las accione dentro de los permisos que tiene el usuario que creo lo creo.
No se puede hacer referencia a una función almacenada por el usuario desde un evento.
Sintaxis
ON SCHEDULE cuando_se_ejecutará [AT ... / EVERY ...][STARTS ...][ENDS ...]
[+ INTERVAL intervalo_de_ejecución]
DO accciones
Podemos ver los eventos del sistema con:
Eliminar un evento:
DROP EVENT IF EXISTS nombre_evento;
Ejecución de una sola vez
Se utiliza la condición AT
Ejemplo, el 1 de mayo se aumentar las existencias en 50 de todos los productos.
ON SCHEDULE AT '2020-05-01'
DO
UPDATE Productos
SET Existencias = Existencias +50;
Ejecución recurrente
Se utiliza la condición EVERY
Ejemplo, lo mismo que el caso anterior, pero se ejecutará cada mes tras la primera ejecución.
ON SCHEDULE EVERY 1 MONTH STARTS '2020-05-01'
DO
UPDATE Productos
SET Existencias = Existencias +50;
INTERVAL
Permite definir un período de tiempo.
Ejemplo, se aumentará el precio del queso cada día, empezando a partir de ahora y acabará dentro de tres días (fecha y hora actual + intervalo de 3 días)
CURRENT_TIMESTAMP + INTERVAL 3 DAY
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 3 DAY
DO
UPDATE Productos
SET Precio=Precio+1
WHERE NomProducto='Queso Cabrales';
ON COMPLETION
Por defecto el evento se elimina tras su ejecución. Con ON COMPLETION podemos guardar el evento para reutilizarlo.
ON SCHEDULE AT '2020-05-01'
ON COMPLETION PRESERVE
DO
UPDATE Productos
SET Existencias = Existencias +50;
Triggers
Un disparador/trigger es un código SQL que se ejecuta cuando se produce una determinada acción sobre la base de datos: INSERT, UPDATE o DELETE.
Sintaxis
ON nombre_tabla
FOR EACH ROW
<bloque_de_instrucciones>
Existe una nomenclatura muy práctica para nombrar un trigger: nombre de la tabla, inicial de la operación DML y inicial del momento de la ejecución (AFTER o BEFORE).
Ejemplo: clientes_BI_TRIGGER (tabla clientes, before, insert)
Identificadores NEW y OLD
Para hacer referencia a la columna de una tabla la cual va sufrir una modificación deberemos utilizar OLD o NEW dependiendo de si queremos acceder al viejo o al nuevo valor.
Si usamos UPDATE podremos referirnos a un valor como OLD y NEW.
Si usamos INSERT solo existirá NEW
Y si usamos DELETE solo existirán valores como OLD
Ejemplo:
CREATE TRIGGER cuenta_BU_Trigger BEFORE UPDATE ON cuenta
FOR EACH ROW
BEGIN
IF NEW.saldo < 0 THEN
SET NEW.saldo = 0;
ELSEIF NEW.saldo > 100 THEN
SET NEW.saldo = 100;
END IF;
END