Triggers en MySQL: Definición y funcionamiento

trigger

Desde la aparición de la versión 5.0.3 de MySQL, tenemos la posibilidad de desarrollar triggers para las tablas. La función de un trigger es ejecutar una acción cuando sucede un evento a la que va asociado en nuestra base de datos.

Por lo tanto, al crear un trigger, establecemos un enlace con una tabla que detecte cambios (INSERT, UPDATE, DELETE) en nuestra tabla.

Para ver su funcionamiento vamos a crear un escenario. Queremos crear una tabla de registros donde los usuarios de nuestra web al modificar los datos de su perfil almacenados en una tabla, automáticamente me lleve a una tabla llamada log_users donde almacenará los datos antíguos y la fecha de modificación.

Antes de empezar con el escenario, debemos tener en cuenta que para manejar los datos podemos tener 2 casos: los datos viejos (OLD), que serán los que estaban en la tabla antes de modificar y los datos nuevos (NEW) que son los datos nuevos introducidos.

Por lo tanto, podremos deducir las posibilidades que tenemos:

  • Los INSERT permiten NEW
  • Los DELETE sólo permiten OLD
  • Los UPDATE permiten NEW y OLD

Ahora veremos la sintáxis de un trigger:

CREATE TRIGGER [Nombre_de_Trigger]
 
[Momento] [Evento] ON [Nombre_Tabla]
 
FOR EACH ROW
 
[SENTENCIA_SQL]

Nombre de Trigger será el nombre que le queramos dar.

Momento será el momento de ejecutarlo (BEFORE, AFTER).

El Evento es el proceso que llamará al trigger (INSERT, UPDATE, DELETE).

Sentencia SQL es la sentencia a ejecutar.

Una vez todo aclarado vamos a crear el ejemplo, para ello necesitamos dos tablas, una para usuarios y otra para registro de cambios.

Tabla usuarios:

CREATE TABLE usuarios {
 
id INT NOT NULL AUTO_INCREMENT,
 
nombre VARCHAR(50),
 
email VARCHAR(50),
 
PRIMARY KEY(id)
 
} ENGINE = InnoDB;

Tabla de registros:

CREATE TABLE log_usuarios {
 
id INT NOT NULL AUTO_INCREMENT,
 
nombre VARCHAR(50),
 
email VARCHAR(50),
 
id_usu INT NOT NULL,
 
fecha_actualizacion DATETIME,
 
PRIMARY KEY(id)
 
} ENGINE = InnoDB;

Ahora crearemos el trigger que insertará en la tabla de registros el nombre antiguo del usuario, su antiguo email y la fecha en la que lo hizo.

CREATE TRIGGER act_usuarios AFTER UPDATE ON usuarios
 
FOR EACH ROW
 
INSERT INTO log_usuarios(nombre, email, id_usu, fecha_actualizacion)
 
VALUES (OLD.nombre, OLD.email, OLD, id, NOW());
¿Te ha gustado? Compártelo y Comenta! Puedes darme tu opinión o consultar tus dudas, de esta forma mantendremos la blogosfera viva.

    One Commentto Triggers en MySQL: Definición y funcionamiento

    1. Jose Luis Arrola dice:

      Hola, muchas gracias por tu aportación, estoy iniciandome en MySQl y me ha servido mucho para entender los Triggers.

    Responder a Jose Luis Arrola Cancelar respuesta

    Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *


    *

    © 2017 Soy Autodidacta | Design Theme by: D5 Creation | Powered by: WordPress