¿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:

Comentarios