You are on page 1of 4

Trigger (base de datos)

Los Triggers o Disparadores son objetos que se asocian con tablas y se almacenan en la
base de datos. Su nombre se deriva por el comportamiento que presentan en su
funcionamiento, ya que se ejecutan cuando sucede algn evento sobre las tablas a las que
se encuentra asociado. Los eventos que hacen que se ejecute un trigger son las
operaciones de insercin (INSERT), borrado (DELETE) o actualizacin (UPDATE), ya que
modifican los datos de una tabla.
La utilidad principal de un trigger es mejorar la administracin de la base de datos, ya que
no requieren que un usuario los ejecute. Por lo tanto, son empleados para implementar las
REGLAS DE NEGOCIO (tipo especial de integridad) de una base de datos. Una Regla de
Negocio es cualquier restriccin, requerimiento, necesidad o actividad especial que debe
ser verificada al momento de intentar agregar, borrar o actualizar la informacin de una
base de datos. Un trigger puede prevenir errores en los datos, modificar valores de una
vista, sincronizar tablas, entre otros.
ndice
[ocultar]

1 Usos

2 Componentes principales

3 Tipos

4 Efectos y caractersticas

5 Ejemplo

6 Disparadores en MySQL

7 Disparadores en PostgreSQL

8 Enlaces externos

Usos[editar]
Son usados para mejorar la administracin de la Base de datos, sin necesidad de contar
con que el usuario ejecute la sentencia de SQL. Adems, pueden generar valores
decolumnas, previene errores de datos, sincroniza tablas, modifica valores de una vista,
etc. Permite implementar programas basados en paradigma lgico (sistemas expertos,
deduccin).

Componentes principales[editar]
La estructura bsica de un trigger es:

Llamada de activacin: es la sentencia que permite "disparar" el cdigo a


ejecutar.

Restriccin: es la condicin necesaria para realizar el cdigo. Esta restriccin


puede ser de tipo condicional o de tipo nulidad.

Accin a ejecutar: es la secuencia de instrucciones a ejecutar una vez que se han


cumplido las condiciones iniciales.

Tipos[editar]
Existen dos tipos de disparadores que se clasifican segn la cantidad de ejecuciones a
realizar:

Row Triggers (o Disparadores de fila): son aquellas que se ejecutaran cada vez
que se llama al disparador desde la tabla asociada al trigger

Statement Triggers (o Disparadores de secuencia): son aquellos que sin importar


la cantidad de veces que se cumpla con la condicin, su ejecucin es nica.

Pueden ser de sesin y almacenados; pero no son recomendables [cita requerida].

Efectos y caractersticas[editar]

No aceptan parmetros o argumentos (pero podran almacenar los datos afectados


en tablas temporales)

No pueden ejecutar las operaciones COMMIT o ROLLBACK porque estas son


parte de la sentencia SQL del disparador (nicamente a travs de transacciones
autnomas)

Pueden causar errores de mutaciones en las tablas, si se han escrito de manera


deficiente.

Ejemplo[editar]
Un sencillo ejemplo (para SQL Server) sera crear un Trigger para insertar un pedido de
algn producto cuando la cantidad de ste, en nuestro almacn, sea inferior a un valor
dado.
CREATE TRIGGER TR_ARTICULO ON ARTICULOS AFTER UPDATE AS BEGIN INSERT
INTO HCO_ARTICULO (IDARTICULO, STOCK, FECHA) SELECT ID_ARTICULO,
STOCK, GETDATE() FROM INSERTED END
INSERT INTO ARTICULOS VALUES (1, 'MEMORIA', 12, '12/03/2014')
SELECT * FROM ARTICULOS
UPDATE ARTICULOS SET STOCK = STOCK - 20 WHERE ID_ARTICULO = 1
SELECT * FROM HCO_ARTICULO
</source>

Disparadores en MySQL[editar]
Los disparadores son soportados en MySQL a partir de la versin 5.0.2. Algunos de los
soportes existentes son los disparadores para las sentencias INSERT, UPDATE yDELETE
El estndar SQL:2003 requiere que los disparadores den a los programadores acceso a
las variables de un registro utilizando una sintaxis como REFERENCING NEW AS n. Por
ejemplo, si un disparador est monitoreando los cambios en la columna salario, podra
escribirse un disparador como:

CREATE TRIGGER ver_salario


BEFORE UPDATE ON empleados
REFERENCING NEW ROW AS n, OLD ROW AS o
FOR EACH ROW
IF n.salario <> o.salario THEN
END IF;

Como en MySQL las sentencias se ejecutan luego de escribir el signo punto y coma (;),
cabe destacar que para crear un disparador en MySQL, antes se escribe la
sentenciaDELIMITER seguida de un carcter tal como |, la cual asigna la funcin del punto
y coma (;) a otro carcter permitiendo que el disparador sea escrito usando los punto y
comas sin que se ejecute mientras se escribe; despus de escrito el disparador se escribe
nuevamente la sentencia DELIMITER ; para asignar al punto y coma su funcin habitual.

Disparadores en PostgreSQL[editar]
Desde 1997 PostgreSQL soporta el uso de disparadores, estos pueden anexarse a las
tablas pero no a las vistas; aunque a las vistas se les pueden crear reglas.
Al igual que en MySQL los disparadores de PostgreSQL se pueden activar luego de
sentencias INSERT, UPDATE o DELETE
Cuando hay varios disparadores, se activan en orden alfabtico.
Adems de permitir el uso de funciones en el lenguaje nativo de PostgreSQL, PL/PgSQL,
los disparadores tambin permiten invocar funciones escritas en otros lenguajes como
PL/Perl.
En Postgres un disparador ejecuta una funcin la cual contiene el cdigo de lo que se
requiere, esto difiere del mtodo expuesto anteriormente para MySQL que escribe el
cdigo a ejecutarse dentro del mismo disparador.
El siguiente es un ejemplo de disparador creado con su respectiva funcin:
CREATE OR REPLACE FUNCTION actualizar() RETURNS TRIGGER AS $ejemplo$
BEGIN
NEW.nombre := NEW.nombres || ' ' || NEW.apellidos ;
RETURN NEW;
END;
$ejemplo$ LANGUAGE plpgsql;
CREATE TRIGGER ejemplo
BEFORE INSERT OR UPDATE ON tabla
FOR EACH ROW EXECUTE PROCEDURE actualizar();
ejemplo 2:
create trigger DIS_t_Libro_insertar on t_Libro
for insert

as
declare @descrip varchar(max)
select @descrip=Descripcion from t_Libro
join inserted
on inserted.codigolibro=t_Libro.codigo
where t_Libro.codigo=inserted.codigolibro
if (@descrip >= (select IdAutor from inserted ))
update t_Libro set Rodaje=Rodaje-inserted.codigolibro
from t_Libro
join inserted
on inserted.codigolibro=t_Libro.codigo
where codigo=t_Libro.codigolibro
else
begin
raiserror ('',10,1)
rollback transaction
end

You might also like