Está en la página 1de 4

Triggers en MySQL

Abril 01st, 2008 | Categora: MySQL A partir de MySQL 5.0.2 se incluy soporte bsico para triggers. Por ahora es muy bsico y limitado, pero an as es una importante feature. En este artculo voy a explicar que son los triggers y como se usan en MySQL.

Que son los triggers


Los triggers (disparadores en espaol) son acciones que pueden ejecutarse de manera automtica cuando determinado evento ocurre en una tabla. Al crear un trigger, se le asocia con una tabla, y se lo programa para que se active antes o despus de la ejecucin de que una sentencia del tipo INSERT, DELETE o UPDATE ocurra en esa tabla. Bsicamente un trigger se compone de tres partes:

Evento
Es el evento que tiene que ocurrir para que el trigger se active. Puede ser una sentencia INSERT, DELETE o UPDATE

Restriccin
Una vez activado el trigger, se puede evaluar una condicin, para saber si ejecutarlo o no.

Accin
La accin que realiza el trigger al ejecutarse.

Como se usan los triggers


Para crear un trigger se usa la sentencia CREATE TRIGGER, junto a clusulas que le indican cuando activarse y que hacer cuando se active. Veamos un ejemplo: Tenemos la tabla test, con los campos id, name y date. Vamos a crear un trigger para que cada vez que se inserte un registro en la tabla, se inserte automticamente la fecha en el campo date. PLAIN TEXT
MySQL: 1. DELIMITER // 2. CREATE TRIGGER set_date

3. 4. 5. 6.

BEFORE INSERT ON test FOR EACH ROW BEGIN SET NEW.DATE = NOW(); END; 7. //

NOTA: usamos la sentencia DELIMITER para poder usar "//" como delimitador en vez de ";". Veamos parte por parte que fue lo que hicimos:

CREATE TRIGGER set_date


Creamos el trigger con la sentencia CREATE TRIGGER y lo nombramos como set_date.

BEFORE INSERT ON test


Le dijimos que se ejecute antes (BEFORE) de que se ejecute una sentencia INSERT en la tabla test (INSERT ON test).

FOR EACH ROW BEGIN


Comenzamos un bucle en el que le indicamos que hacer por cada vez que se active el trigger.

SET NEW.date = NOW();


Le indicamos la accin a realizar al ejecutarse el trigger. En este caso, insertar en el campo date la fecha actual, con NEW.date nos estamos refiriendo al campo del registro que se va a insertar. Y con NOW() obtenemos la fecha actual. Ahora cada vez que insertemos un nuevo registro en la tabla test, se va a insertar la fecha actual automticamente en el campo date. Si por alguna razn, quisiramos que el trigger no se ejecute ms, debemos eliminarlo. Para eliminar un trigger, se utiliza la sentencia DROP TRIGGER indicndole el nombre del trigger a borrar, en nuestro ejemplo sera algo as: PLAIN TEXT
MySQL:

1. DROP TRIGGER set_date; NOTA: no olvidar volver a poner el delimitador como ";". (DELIMITER ;).

Un ejemplo un poco ms interesante


Antes habamos dicho que un trigger tiene tres partes: un evento, una restriccin y una accin. En el ejemplo anterior tenamos el evento y la accin, pero no usamos ninguna restriccin. Veamos otro ejemplo en el que usemos una restriccin: Tenemos una tabla employers, con los campos id, name y salary. Vamos a crear un trigger que verifique que el valor del campo salario sea siempre positivo. Con este trigger nos aseguramos de que cada vez que se actualice un registro, el valor de salary siempre sea positivo. PLAIN TEXT
MySQL: 1. DELIMITER // 2. CREATE TRIGGER positive_update 3. BEFORE UPDATE ON employers 4. FOR EACH ROW BEGIN 5. IF NEW.salary <0 6. THEN SET NEW.salary=OLD.salary; 7. END IF; 8. END; 9. //

Los puntos importantes de esto seran:

IF NEW.salary < 0
Con eso verificamos si el nuevo valor para el campo salary (NEW.salary) es menor a cero.

THEN SET NEW.salary=OLD.salary;


Si la condicin anterior se cumple, entonces el nuevo valor de salary va a ser igual al viejo valor de salary (OLD.salary). Para insertar, hacemos un trigger parecido, pero si el valor de salary es menor a cero, entonces cambia el valor a cero: PLAIN TEXT
MySQL: 1. DELIMITER // 2. CREATE TRIGGER positive_insert 3. BEFORE INSERT ON employers

4. 5. 6. 7. 8.

FOR EACH ROW BEGIN IF NEW.salary <0 THEN SET NEW.salary=0; END IF; END; 9. //

NOTA: para que un usuario pueda crear triggers, necesita el privilegio SUPER. Bueno, todava es algo muy limitado el tema de los triggers en MySQL. Pueden consultar ms sobre triggers en la info. oficial de MySQL sobre triggers.