Cómo crear y utilizar Triggers en MySQL

GuíasBases de datosMySQLProgramacionSQL

Los triggers o disparadores de MySQL son usa serie de reglas predefinidas que están asociadas a una tabla. Estas reglas permiten la ejecución de una serie de instrucciones cuando se producen ciertos eventos como pueden ser la inserción de un nuevo registro, la actualización o el borrado de los datos de una tabla.

¿Qué es un Trigger?

Técnicamente, un trigger es un objeto de una base de datos que está asociado a una tabla, y que será activado cuando la acción que tiene asociada tiene lugar. El trigger se puede ejecutar cuando tiene lugar una acción INSERT, UPDATE o DELETE, siendo posible su ejecución tanto antes como después del evento.

Los triggers están disponibles desde la versión 5.0.2 de MySQL. Para poder crear un trigger es necesario que tengas permisos INSERT y DELETE sobre la base de datos.

Configuración de la base de datos

Antes de crear un trigger, vamos a crear una base de datos de ejemplo. Para ello usaremos la línea de comandos, aunque crear la base de datos MySQL de muchas otra formas.

Para crear una base usando la línea de comandos, conéctate a MySQL, reemplazando usuario por tu nombre de usuario.

mysql -u usuario -p

A la base de datos le daremos el nombre de base_ejemplo. Ejecuta las siguientes sentencias para crearla:

  1. Crea la base de datos mediante la sentencia CREATE:
    CREATE DATABASE base_ejemplo;
  2. Selecciona la base de datos para así poder ejecutar consultas SQL sobre ella:
    USE base_ejemplo;

    Si utilizas phpMyAdmin, basta con que hagas clic en el nombre de la base de datos para editarla.

  3. Creamos una tabla llamada productos:
    CREATE TABLE productos (
        id INT NOT NULL AUTO_INCREMENT,
        nombre VARCHAR(20) NOT NULL,
        coste FLOAT NOT NULL DEFAULT 0.0,
        precio FLOAT NOT NULL DEFAULT 0.0,
        PRIMARY KEY(id)
    );
  4. Por último, insertamos datos de prueba en la tabla productos:
    INSERT INTO productos (nombre, coste, precio) VALUES ('Producto A', 4, 8), ('Producto B', 2, 4),('Producto C', 40, 80);

Una vez tenemos la base de datos creada, vamos a ver cómo crear un trigger para esta base de datos.

Cómo crear un Trigger

Vamos a crear un trigger que actualice automáticamente el precio de los productos de la tabla creada en el apartado anterior cada vez que se actualice su coste. Le llamaremos actualizarPrecioProducto.

El trigger comprobará si el coste del producto ha cambiado y, en caso afirmativo, establecerá el precio del producto con el doble del valor de su coste. Para crear el trigger, ejecuta las siguientes sentencias SQL:

DELIMITER $$
CREATE TRIGGER 'actualizarPrecioProducto'
BEFORE UPDATE ON 'productos'
FOR EACH ROW
BEGIN
  IF NEW.coste <> OLD.coste
    THEN
      SET NEW.precio = NEW.coste * 2;
  END IF ;
END$$
DELIMITER ;

Lo que hacemos es crear un trigger que se ejecute antes de la actualización del registro, algo que indicamos con la sentencia “BEFORE UPDATE ON“. Luego comprobamos si el coste antiguo del producto difiere del nuevo y, si es así, actualizamos el precio con el doble del valor de su nuevo coste. Un negocio redondo.

Cómo utilizar un trigger

Una vez hayamos creado el trigger, no tendremos que hacer absolutamente nada para llamarlo, puesto que el motor de la base de datos lo invocará automáticamente cada vez que se actualice un registro de la tabla de productos.

Sin embargo, sí podemos comprobar el resultado del trigger actualizando un registro con una sentencia UPDATE como esta:

UPDATE productos SET coste = 5 WHERE id = 1;
SELECT * FROM productos;

Cuando se ejecuta la actualización con la sentencia UPDATE, se activa también el trigger, que actualizará el precio con el doble de su valor, según lo hemos definido. Este será el resultado:

+-----------------+-------+--------+
| id | nombre     | coste | precio |
+----+------------+-------+--------+
| 1  | Producto A | 5     | 10     |
| 2  | Producto B | 2     | 4      |
| 3  | Producto C | 40    | 80     |
+----+------------+-------+--------+

Se trata de un ejemplo muy básico del uso de un trigger, pero es bastante ilustrativo con fines introductorios.

Cómo borrar un trigger

Puedes eliminar una trigger haciendo uso de la sentencia DROP TRIGGER Por ejemplo, si quieres eliminar el trigger actualizarPrecioProducto del ejemplo anterior, tendrás que ejecutar esta sentencia:

DROP TRIGGER actualizarPrecioProducto;

Esto ha sido todo. Para más información acerca de los triggers, puedes consultar la documentación oficial de MySQL.