Saltar al contenido

¿Cómo Crear un Disparador o Trigger?

4 junio, 2019

Si estás interesado en aprender sobre el sistema de gestión de bases de datos MySQL, has llegado al post adecuado. Más adelante te hablaremos en detalle sobre la programación de Triggers. Esto ya es materia avanzada, es por ello que si eres apenas un novato, encontrarás interesante la lectura de este post, pues aprenderás un monton.

Concepto Básico de Trigger

 Primero vamos con la definición de Trigger. Este es un objeto que está dentro de una base de datos que lleva a cabo una acción cuando se produce un evento en la misma. Como ejemplo tenemos lo siguiente: cuando se venda una entrada de cine, debe descontarse un asiento disponible. Para ello debemos ingresar el siguiente código genérico:

CREATE TRIGGER nombretrigger.

{BEFORE | AFTER}

// Se ejecutará antes o después del evento

{INSERT | UPDATE | DELETE }

//acción que va a disparar el trigger

ON nombretabla

//nombre de la tabla que afectó al evento

FOR EACH ROW

Sentencia SQL que va a ser ejecutada más adelante

¿Cómo Crear las Bases de Datos?

Ahora vamos a crear el ejemplo mencionado anteriormente de la venta de entradas en el cine. Para ello tenemos que usar preferiblemente phpmyadminn. Pero también sirve cualquier software que sea compatible con procedimientos almacenados y triggers. Para crear la base de datos, debemos hacer lo siguiente:

CREATE DATABASE `ventas`

Ahora tenemos que  crear 2 tablas

Primero, procedemos a crear la tabla para almacenar las entradas vendidas de la siguiente forma

CREATE TABLE `entradas` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`idevento` int(11) NOT NULL,
`nroticket` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Luego, tenemos que elaborar la tabla para guardar la disponibilidad de entradas de cine para una función específica de esta forma:

CREATE TABLE IF NOT EXISTS `stock` (
`idevento` int(10) NOT NULL,
`stockactual` int(10) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE `eventos` (
`idevento` int(10) NOT NULL AUTO_INCREMENT,
`evento` int(11) varchar(200),
`fecha` date NOT NULL,
PRIMARY KEY (`idevento`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

A continuación debes cerrar el trigger como una consulta SQL. Para hacerlo te recomendamos usar el software gratis llamado “HEIDISQL”.

A su vez, la sentencia NEW.nombre_column nos muestra cuál campo de la operación disparadora usaremos al momento de la ejecución. En este caso será idevento, pero si existieran más, tenemos que usar siempre la palabra NEW en adelante.

CREATE TRIGGER `actualizar_stock` AFTER INSERT ON `entradas`
FOR EACH
ROW
UPDATE stock SET stockactual=stockactual -1 WHERE idevento = NEW.idevento

Posteriormente, debemos ejecutar la sentencia SQL y veremos que se ha creado el disparador de forma satisfactoria.

Como ejemplo, ingresaremos en la tabla stock de 500 entradas de cine disponibles para una función. En este caso no existirá una respuesta del trigger, ya que ha sido elaborado para ejecutarse cuando ocurra una inserción en la tabla de entradas.

INSERT INTO `ventas`.`stock` (`idevento` ,`stockactual`) VALUES (‘1’, ‘500’);

¿Cómo Podemos Probar los Triggers?

En esta parte del post te mostraremos cómo probar la programación de Triggers. Para ello debemos suponer que vendimos la entrada número 100 para la función 1 y luego insertamos la venta realizada en la base de datos “entradas”.

INSERT INTO entradas (idevento ,nroentrada) VALUES ( ‘1’, ‘100’);

Ahora, tenemos que analizar lo ocurrido en la respectiva tabla stock. En este caso, ahora el stock tiene 499 entradas disponibles. Esto se debe a que la inserción en la tabla ticket disparó y luego ejecutó el trigger llamado actualiza_stock.

Si utilizamos este método podemos estar seguros de que habrá transparencia en cuanto a la ejecución para el usuario y el programador.

Otro ejemplo para dar de baja un artículo de un almacén es el siguiente

CREATE TRIGGER `Baja_productos` AFTER DELETE ON `productos`
FOR EACH
DELETE FROM stock WHERE idproducto=NEW.idproducto
ROW 

¡Listo, esto ha sido todo! Con esta información podrás ampliar mucho más tus conocimientos con respecto a la programación de Triggers. Nos vemos pronto en el siguiente post!