miércoles, julio 02, 2014

MySQL Triggers


A partir de la version 5 de MySQL ya es posible realizar triggers que son funciones especificas que se pueden ejecutar antes (BEFORE) o despues (AFTER) de una transaccion que puede ser DELETE, INSERT, UPDATE.
Los triggers utilizan OLD y NEW que son los valores que tienen las columnas antes y después de la modificación.
Con triggers o disparadores se pueden realizar acciones como replicacion de datos de una Base de Datos a otra o para llevar un Log de Transacciones insertando en una tabla auxiliar de logs.

Ejemplo

Crear una tabla a la cual le pondremos un trigger
CREATE TABLE clientes
(
    iCliente INT NOT NULL AUTO_INCREMENT,
    Cliente VARCHAR(450) DEFAULT '',
    PRIMARY KEY(iCliente)
)ENGINE = InnoDB;
Crear una tabla de logs donde insertaremos los clientes modificados
CREATE TABLE clientes_log
(
    iCliente_Log INT NOT NULL AUTO_INCREMENT,
    Cliente VARCHAR(450) DEFAULT '',
    Fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY(iCliente_Log)
)ENGINE = InnoDB;
Creamos un Trigger que se dispare en cada UPDATE de la tabla clientes
CREATE TRIGGER trigger_clientes_log AFTER UPDATE ON clientes
FOR EACH ROW
INSERT INTO clientes_log(Cliente)VALUES(OLD.Cliente);
Con esto completamos un log automatico para cambios en la tabla de clientes.