Sunteți pe pagina 1din 17

Triggers (Disparadores)

Bachiller: Jimmy W. Mass V.


Disparadores(Triggers)
• Son objetos relacionados a tablas que son
ejecutados o mostrados cuando sucede
algún evento en contra de sus tablas
asociadas.

• Estos eventos son aquellas sentencias


(INSERT, DELETE, UPDATE) que modifican
los datos dentro de la tabla a la que está
asociado el trigger y pueden ser disparados
antes (BEFORE) y/o después (AFTER) de
que la fila es modificada.
Ventajas de los
Disparadores
• Los triggers son muy parecidos a los
procedimientos almacenados, de tal forma que si
deseamos ejecutar múltiples acciones cuando un
trigger es disparado, podemos encapsular estas
acciones dentro de una construcción BEGIN, END.

• Permite llevar un registros de las actividades de


los usuarios y las operaciones que realizan en la
Base de Datos
Sintaxis

• Para crear o eliminar un disparador, se


emplean las sentencias

• CREATE TRIGGER
• DROP TRIGGER
Sintaxis Create Trigger

CREATE TRIGGER nombre_disparador


momento_disparo evento_disparado
ON nombre_tabla FOR EACH ROW
sentencia_disparada
Sintaxis Create Trigger
Donde:
momento_disparo es el momento en que el disparador entra en
acción. Puede ser BEFORE (antes) o AFTER (después), para
indicar que el disparador se ejecute antes o después de la
sentencia que lo activa.

evento_disparado indica la clase de sentencia que activa al


disparador. Puede ser INSERT, UPDATE, o DELETE. Por ejemplo,
un disparador BEFORE para sentencias INSERT podría utilizarse
para validar los valores a insertar.

sentencia_disparada es la sentencia que se ejecuta cuando se activa


el disparador
Sintaxis Drop Trigger

DROP TRIGGER
[nombre_esquema.]nombre_disp

Donde:
Anteriormente a la versión 5.0.10 de
MySQL, se requería el nombre de tabla en
lugar del nombre de esquema.
(nom_tabla.nom_disp).
Funcionalidades

• Los triggers tienen un par de palabras


clave extra
• OLD : valores de las columnas antes del
cambio
• NEW :valores de las columnas después de
que la sentencia fue procesada.
• Las sentencias INSERT únicamente
permiten NEW, las sentencias UPDATE
permiten ambos, NEW y OLD, y las
sentencias DELETE permiten sólo OLD.
Pasos para crear un trigger desde
mysql

1. Crear la base de datos y las tablas sobre la


que va actuar el disparador
2. Crear los procedimientos almacenados si se
necesitan.
3. Declarar el trigger desde mysql
4. Ejecutar la sentencia mysql que provoca la
ejecución del trigger
Ejemplo de Disparador
Creación de la tabla Paso 1
Mysql> create database Vn;
Mysql>use Vn;
mysql> DELIMITER //
mysql> CREATE TABLE ventas (id INT NOT NULL
AUTO_INCREMENT,
item VARCHAR(10),
valor DECIMAL(9,2),
ejecutivo_cuenta VARCHAR(10),
comision DECIMAL(7,2),
PRIMARY KEY(id)) //
Creación de un
procedimiento almacenado
mysql> CREATE PROCEDURE
comision(valor DECIMAL(9,2))
BEGIN
SET @comm := valor / 10;
END;
//
Creación del trigger
mysql> CREATE TRIGGER ventas_comm
BEFORE INSERT ON ventas
FOR EACH ROW
BEGIN
CALL comision(NEW.valor);
SET NEW.comision = @comm;
END;
//
Prueba de ejecución del
trigger
mysql> DELIMITER ;
mysql> INSERT INTO ventas(item, valor, ejecutivo_cuenta)
VALUES('Queso',300.00,'Mario');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO ventas(item, valor, ejecutivo_cuenta)
VALUES('Papas',400.00,'Mario');
Query OK, 1 row affected (0.01 sec)
Vista de la acción del
trigger
• mysql> SELECT * FROM ventas;
• +----+-------+--------+------------------+----------+
• | id | item | valor | ejecutivo_cuenta | comision |
• +----+-------+--------+------------------+----------+
• | 1 | Queso | 300.00 | Mario | 30.00 |
• | 2 | Papas | 400.00 | Mario | 40.00 |
• +----+-------+--------+------------------+----------+
• 2 rows in set (0.00 sec)
Ejemplo 2 Datos
preliminares
Mysql> use videoteca
Mysql> describe pelicula;
Mysql> select * from pelicula;

Verificamos que Robert de Niro no se encuentra


en ninguna pelicula.
Ejemplo 2 Creación de
trigger
Mysql> delimiter //
Mysql> Create trigger before_insert_pelicula
before insert on pelicula
For each row
Begin
Set New.actor=’Robert de Niro’;
End;
//
Disparo de la acción

Mysql> delimiter ;
mysql> insert into pelicula (titulo, director)
values (‘taxi driver’,’Coppola’);
Ahora verificamos la inserción y la acción de
disparo
Mysql>select * from pelicula;
Eliminamos el trigger
Mysql> drop trigger before_insert_pelicula;