TRIGGERS EN MYSQL: QUÉ SON Y CÓMO CREARLOS

En MYSQL también se permite el manejo de TRIGGERS ("disparador") como en ORACLE y la verdad es que resulta bastante sencillo. Su código no es nada complejo si se tienen nociones de programación, y es bastante intuitivo.
Los triggers se pueden asociar a las transacciones:
  • INSERT
  • UPDATE
  • DELETE
Y se puede asociar el trigger antes o después de la transacción, dependiendo de las necesidades del proyecto. Veamos un código de ejemplo.

DELIMITER $$

CREATE TRIGGER nombre_trigger BEFORE INSERT ON tabla1
  FOR EACH ROW BEGIN
INSERT INTO tabla2 SET campo_tabla2 = NEW.campo_tabla1;
DELETE FROM tabla3 WHERE campo_tabla3 = NEW.campo_tabla1;
UPDATE tabla4 SET campo_tabla4 = campo_tabla4 + 1
WHERE campo_tabla4 = NEW.campo_tabla1;
  END $$

DELIMITER ;
En ejemplo anterior vemos que tenemos la palabra DELIMITER $$ que sirve para cambiar el delimitador de sentencias que no sea ";", en este caso se pone $$ porque PHPMyAdmin lo hace sí, pero MySQL admite cualquiera.
Este trigger se ejecutará antes de insertar los valores pasados en el INSERT y realiza varias operaciones bastante sencillas.
También se puede elegir cuando hacer que se ejecute el trigger, si antes de la transacción poniendo BEFORE, o después poniendo AFTER. En el ejemplo que he puesto el trigger se ejecutará antes de la inserción de datos en la tabla.
En el ejemplo que he puesto antes se puede apreciar que aparece la palabra NEW que se refiere al nuevo valor del campo después de la transacción que hace que el trigger se ejecute, si se quiere hacer referencia al valor antiguo es tan sencillo como usar la palabra OLD que asumirá el valor que estaba antes de realizar la transacción.
Los INSERT permiten NEW, los delete sólo old y los UPDATE ambas. Ésto es algo bastante importante y a tener en cuenta.