Вы находитесь на странице: 1из 24

Introducción a TSQL

Unidad 11

Autor
Isabel Ponce
Unidad 11

Objetivos

• Disparadores (Triggers)
– Integridad Referencial
– Aplicaciones
– Activación
– Creación
– Tablas especiales
– Disparadores de Modificación
– Contar renglones
– If update
– Borrar un trigger
– Anidamiento
– Restricciones
Disparadores

• Los Disparadores son un tipo


especial de procedimiento
almacenado que se activa cuando
un usuario realiza una inserción,
modificación o borrado en una
tabla.

• Ejecutar un disparador se llama


activar o desencadenar un
disparador.

• Los disparadores tienen la


capacidad de consultar otra tabla e
incluir instrucciones complejas.

• Los disparadores no se ejecutan o


llaman directamente.
Disparadores

• Los disparadores se usan para:

– Reforzar la integridad referencial.


– Definir las reglas del negocio.
– Administrar funciones.

• Las actualizaciones y
eliminaciones en cascada
pueden realizarse mediante
disparadores.
Integridad Referencial

• La integridad referencial es el
proceso por el cual se mantienen las
relaciones entre los datos.

• Un renglón hijo sin un renglón padre


es llamado huérfano.

• La integridad referencial previene la


existencia de este tipo de renglones.

• Por ejemplo:

• Un título no puede existir sin un


autor.

• Si el autor se borra, sus títulos no


pueden existir en la BD.
Cascada

• Cascada es el proceso por el cual


los cambios a un padre se propagan
a los hijos.

• Si se actualiza el valor del padre,


también se debe actualizar el valor
del hijo para mantener la relación.

• Lo mismo aplica en las


eliminaciones.
Eliminaciones

• Existen varios tipos de efectos en las


eliminaciones:

– Borrado
• Cuando el padre se borra, todos los hijos
correspondientes también se borran.

– Restricción
• Si un hijo existe, no se permite la
eliminación del padre.

– Asignar nulos
• Cuando un padre se borra, se asigna
valor nulo a los hijos correspondientes.

– Asignar valor por omisión


• Cuando un padre se borra, se asigna
valor por omisión a los hijos
correspondientes.
Actualizaciones

• Los disparadores de actualización


sólo tienen dos efectos:

– Actualizar
• Cuando el padre cambia, el hijo cambia.

– Restringir
• Si existe un hijo, no se permiten cambios
al padre.
Aplicaciones

• Los disparadores pueden ser elementos


poderosos para cualquier aplicación.

• Los disparadores se usan para las


siguientes funciones adicionales:

– Mantener datos duplicados.


• Se usan para crear una copia adicional
de los datos para usar en otro sistema.
– Mantener datos derivados.
• Se usan para mantener datos agregados
de modo que una aplicación no tiene que
crear el acumulado posteriormente.
– Reforzar restricciones complejas.
• Refuerza las reglas del negocio como
que un empleado no tenga un salario
mayor al director de la empresa.
– Generan registros adicionales.
• Actúa como un registro de auditoria
adicional.
Activación

• Cuando se inserta, modifica o borra un


dato de una tabla se ejecuta un
disparador.

• El disparador se activa después de


que el dato se actualiza.

• Al activarse pasa a formar parte de la


transacción donde se hizo la
modificación..

• Un disparador se activa sólo una vez


por instrucción de actualización.
– Si se insertan 5000 renglones en una sola
transacción, el disparador sólo se ejecuta
una vez.

• El disparador puede abortar la


transacción o enviar un error al cliente.
Activación

• Cuando se actualiza un renglón de


una tabla que tiene un disparador,
éste se ejecuta.

– Se ejecuta si hubo o no renglones


afectados.
– Si se insertó y ocurre una violación de
llave primaria, el disparador no se
ejecuta.
Creación

• Sintaxis:

create trigger <nomDisparador>


{before | after}
{insert | update | delete}
on <tabla>
for each row
<instrucciónSQL>

• Una tabla puede tener tres tipos de


disparadores.
– para insertar
– para modificar
– para borrar

• Los disparadores no pueden llamarse


directamente o recibir parámetros.
Creación

• Los disparadores tienen un momento de


acción: pueden activarse antes o después
de un evento.

• Tienen un evento, pudiéndose activar al


insertar, eliminar o modificar.

• Se debe indicar sobre cuál de las tablas se


disparará.

• La última cláusula indica que la activación


ocurre para cada renglón de la tabla y no
para la tabla entera.

• Es conveniente definir un estándar para


nombrar los disparadores:

– t[i,u,d]<Tabla>
– Por ejemplo: tiVentas, tdVentas, tiuTiendas,
tudAutores, tiudEmpleados
Variables de transición

• Dentro de los disparadores, es válido


referirse a cualquier columna de la
tabla.

• Sin embargo, el nombre de las


columnas en algún momento puede
ser ambiguo, ya que se puede referir
al nuevo valor de la columna o al
anterior.

• Los disparadores proporcionan las


variables de transición OLD y NEW
para referirse a estos valores.
Variables de transición

• Con Insert, sólo NEW es legal.

• Con Delete, sólo OLD es válida.

• Con Update, ambas son válidas.

• Ejemplo:

CREATE TRIGGER t2_au


BEFORE UPDATE ON t2
FOR EACH ROW
BEGIN
SET @old = OLD.c1;
SET @new = NEW.c1;
END;//

UPDATE t2 SET c1 = c1 + 1;//


Ejemplo de Inserción

• Disparador de Inserción

CREATE TRIGGER t22_bi


BEFORE INSERT ON t2
FOR EACH ROW
BEGIN
SET @x = 'Trigger activado!';
SET NEW.c1 = 55;
END;//

INSERT INTO t2 VALUES (1)//

SELECT @x, t2.* FROM t2//


Ejemplo Check

• Disparadores de verificación:

CREATE TABLE t25


(s1 INT, s2 CHAR(5),
PRIMARY KEY (s1)) //

CREATE TRIGGER t25_bi


BEFORE INSERT ON t25
FOR EACH ROW
IF LEFT(NEW.s2,1)<>'A' THEN SET
NEW.s1=0;
END IF;//

CREATE TRIGGER t25_bu


BEFORE UPDATE ON t25
FOR EACH ROW
IF LEFT(NEW.s2,1)<>'A' THEN
SET NEW.s1=0;
END IF;//

INSERT INTO t25 VALUES (0,'a')//


INSERT INTO t25 VALUES (5,'b') // #error
Borrar Disparadores

• Para borrar un disparador se usa:

drop trigger <disparador>;

drop trigger t25_bi;


Control de
Transacciones

• No se puede abortar a una


transacción nombrada en una
transacción dentro de un disparador,
ocurriría un error de ejecución.

• Se aborta todo, incluso el disparador


y procedimiento almacenado.

• Si se anidan disparadores, al abortar


un disparador, abortará todo el
trabajo realizado en todos los
disparadores y la instrucción DML
que ejecutó el primero en la cadena.
Disparadores Anidados

• Un disparador normalmente no
puede llamarse a sí mismo.

– Si un update lanza un disparador de


update y el disparador de update
actualiza la misma tabla, el segundo
update no lanza el disparador
nuevamente.
Restricciones

• No se le pueden pasar parámetros a


un disparador.

• Las tablas temporales no pueden


tener disparadores.

• No se pueden crear objetos dentro


de un disparador.

• No se debe abortar a una


transacción nombrada.
Notas

• Los disparadores pueden ejecutar


procedimientos almacenados.

• Para regresar información al usuario


desde un disparador se usan
variables.

• Aunque son herramientas potentes,


no siempre son la mejor alternativa
por motivos de rendimiento.

• No se deberían extraer datos desde


un disparador o mandar datos al
usuario.
Resumen Unidad 14

• Un disparador es un tipo especial de


procedimiento almacenado que se
ejecuta automáticamente cuando se
usa una instrucción DML.

• Los disparadores se usan para reforzar


la Integridad Referencial, aplicar reglas
de la empresa y ejecutar tareas de
administración.

• Cada tabla puede tener tres tipos de


disparadores.

• Cada disparador tiene acceso a sus


variables de transición.

• Para cada tipo de operaciones en


cascada, se puede usar un disparador
para reforzar la integridad referencial.
Ejercicios

1. Crear un disparador que mantenga


la integridad referencial para la tabla
de ventas.
a. Si se inserta un stor_id, validarlo contra
la tabla de ventas.
b. Si es inválido enviar un mensaje
apropiado y abortar la transacción.
2. Crear un disparador para la tabla
publishers que despliegue el
contenido de las variables de
transición.

Вам также может понравиться