Triggers en MySQL 5

¿Qué son los triggers?

Los Triggers son simplemente procedimientos guardados en la base de datos que se ejecutan antes (BEFORE) y/o después (AFTER) de algún(os) eventos (INSERT, DELETE, UPDATE) sobre la tabla que fue asociada al trigger.

Tienen dos palabras claves, OLD y NEW que simbolizan los valores anteriores o nuevos de la columna.

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

Esta es el la estructura de como se declara un trigger:

CREATE TRIGGER [ Nombre_de_Trigger ]
[ Momento ] [ Evento ] ON [ Nombre_de_Tabla ]
FOR EACH ROW
[ Sentencia_SQL ]

Donde:

  • Nombre_de_Trigger: Es el nombre que identificara al trigger
  • Momento: Sera cuando se ejecute ( BEFORE, AFTER )
  • Evento: Proceso el cual llamara al trigger ( INSERT, UPDATE, DELETE )
  • Sentencia_SQL: SQL que se ejecutara al realizar la acción anterior
  • Un ejemplo de trigger seria guardar un log de cambios de datos de un usuario.

    Primero crearemos la tabla `user`

    CREATE TABLE `user`(
    	`id`      int not null auto_increment,
            `name`  varchar(100),
            `email` varchar(50),
            PRIMARY KEY(id)
    ) ENGINE = InnoDB;
    

    Insertaremos un par de registros

    INSERT INTO `user` (`name`, `email`) VALUES
    ('Cesar', 'cesar@craftyman.net'),
    ('Maria', 'maria@gmail.com'),
    ('Jose', 'j0s3@hotmail.com'),
    ('Albert','albertpr@yahoo.com');
    

    Esta sera la tabla de logs que guardara los datos históricos del usuario

    CREATE TABLE log_user
    (
    	`id`          int not null auto_increment,
    	`name`        varchar(100),
    	`email`       varchar(50),
    	`id_user`     int not null,
    	`user`        varchar(40),
    	`date_update` datetime,
    	primary key(id)
    ) ENGINE = InnoDB;
    

    y finalmente un trigger que se disparará cada vez que alguien modifique un dato de la tabla clientes y lo guardará en una tabla junto al nombre del usuario y la fecha.

    Ahora crearemos nuestro trigger llamado “trigger_log_users” que se ejecutara justo despues de actualizar la tabla `user` y guardara los datos anteriores de `user` en la tabla `log_user`

    CREATE TRIGGER trigger_log_users AFTER UPDATE ON `user`
       FOR EACH ROW
       INSERT INTO log_user(`name`, `email`, `id_user`, `user`, `date_update` )
       VALUES (OLD.`name`, OLD.`email`, OLD.`id`, CURRENT_USER(), NOW() );
    

    Recursos

    Tags:  

     

    Posteado el: 10/02/2009  por: Craftyman

Post Relacionados

Comentarios