fbpx
Wikipedia

Trigger (base de datos)

Un trigger o disparador es un objeto que se asocia con tablas y se almacena en la base de datos. Su nombre se deriva por el comportamiento que presentan en su funcionamiento, ya que se ejecutan cuando sucede algún evento sobre las tablas a las que se encuentra asociado. Los eventos que hacen que se ejecute un trigger son las operaciones de inserción (INSERT), borrado (DELETE) o actualización (UPDATE), ya que modifican los datos de una tabla.

La utilidad principal de un trigger es mejorar la gestión 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 restricción, requerimiento, necesidad o actividad especial que debe ser verificada al momento de intentar agregar, borrar o actualizar la información de una base de datos. Los triggers pueden prevenir errores en los datos, modificar valores de una vista, sincronizar tablas, entre otros.

Combinaciones

La acción del trigger,siempre que no se viole la restricción del trigger se ejecuta dependiendo de la combinación de tipos de trigger:

- Before statement: Antes de ejecutar la sentencia de disparo.

-Before row: Antes de modificar cada fila afectada por la sentencia de disparo,y antes de chequear las restricciones de integridad apropiadas .

-After statement: Después de ejecutar la sentencia de disparo,y después de chequear las restricciones de integridad apropiadas.

-After row: Después de modificar cada fila afectada por la sentencia de disparo y posiblemente aplicando las restricciones de integridad apropiadas .

Componentes principales

Estructura básica de un "trigger" (disparador):

  • Llamada de activación: es la sentencia que permite "disparar" el código a ejecutar.
  • Restricción: es la condición necesaria para realizar el código. Esta restricción puede ser de tipo condicional o de tipo nulidad.
  • Acción a ejecutar: es la secuencia de instrucciones a ejecutar una vez que se han cumplido las condiciones iniciales.

Tipos

Existen dos tipos de disparadores que se clasifican según 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 condición, su ejecución es única.

Pueden ser de sesión y almacenados; pero no son recomendables[cita requerida].

Efectos y características

  • No aceptan parámetros o argumentos (pero podrían 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 través de transacciones autónomas)
  • Pueden causar errores de mutaciones en las tablas, si se han escrito de manera deficiente.

Ejemplo

Un sencillo ejemplo (para SQL Server) sería crear un Trigger para insertar un pedido de algún producto cuando la cantidad de éste, en nuestro almacén, 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 

Disparadores en MySQL

Los disparadores son soportados en MySQL a partir de la versión 5.0.2. Algunos de los soportes existentes son los disparadores para las sentencias INSERT, UPDATE y DELETE

El estándar 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, podría 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; 
 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 sentencia DELIMITER seguida de un carácter tal como |, la cual asigna la función del punto y coma (;) a otro carácter permitiendo que el disparador sea escrito usando los punto y comas sin que se ejecute mientras se escribe; después de escrito el disparador se escribe nuevamente la sentencia DELIMITER ; para asignar al punto y coma su función habitual.

Disparadores en PostgreSQL

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 alfabético.

Además de permitir el uso de funciones en el lenguaje nativo de PostgreSQL, PL/PgSQL, los disparadores también permiten invocar funciones escritas en otros lenguajes como PL/Perl.

En Postgres un disparador ejecuta una función la cual contiene el código de lo que se requiere, esto difiere del método expuesto anteriormente para MySQL que escribe el código a ejecutarse dentro del mismo disparador.

El siguiente es un ejemplo de disparador creado con su respectiva función:

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 

Enlaces externos

  • [1]
  • Microsoft SQL Server CREATE TRIGGER (en inglés)
  • Microsoft SQL Server DROP TRIGGER (en inglés)
  • Sentencia DB2 CREATE TRIGGER (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última).
  • Oracle CREATE TRIGGER
  • Trigger en PostgreSQL (en inglés)
  •   Datos: Q835769

trigger, base, datos, trigger, disparador, objeto, asocia, tablas, almacena, base, datos, nombre, deriva, comportamiento, presentan, funcionamiento, ejecutan, cuando, sucede, algún, evento, sobre, tablas, encuentra, asociado, eventos, hacen, ejecute, trigger, . Un trigger o disparador es un objeto que se asocia con tablas y se almacena en la base de datos Su nombre se deriva por el comportamiento que presentan en su funcionamiento ya que se ejecutan cuando sucede algun evento sobre las tablas a las que se encuentra asociado Los eventos que hacen que se ejecute un trigger son las operaciones de insercion INSERT borrado DELETE o actualizacion UPDATE ya que modifican los datos de una tabla La utilidad principal de un trigger es mejorar la gestion 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 restriccion requerimiento necesidad o actividad especial que debe ser verificada al momento de intentar agregar borrar o actualizar la informacion de una base de datos Los triggers pueden prevenir errores en los datos modificar valores de una vista sincronizar tablas entre otros Indice 1 Combinaciones 2 Componentes principales 3 Tipos 4 Efectos y caracteristicas 5 Ejemplo 6 Disparadores en MySQL 7 Disparadores en PostgreSQL 8 Enlaces externosCombinaciones EditarLa accion del trigger siempre que no se viole la restriccion del trigger se ejecuta dependiendo de la combinacion de tipos de trigger Before statement Antes de ejecutar la sentencia de disparo Before row Antes de modificar cada fila afectada por la sentencia de disparo y antes de chequear las restricciones de integridad apropiadas After statement Despues de ejecutar la sentencia de disparo y despues de chequear las restricciones de integridad apropiadas After row Despues de modificar cada fila afectada por la sentencia de disparo y posiblemente aplicando las restricciones de integridad apropiadas Componentes principales EditarEstructura basica de un trigger disparador Llamada de activacion es la sentencia que permite disparar el codigo a ejecutar Restriccion es la condicion necesaria para realizar el codigo Esta restriccion puede ser de tipo condicional o de tipo nulidad Accion a ejecutar es la secuencia de instrucciones a ejecutar una vez que se han cumplido las condiciones iniciales Tipos EditarExisten dos tipos de disparadores que se clasifican segun 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 condicion su ejecucion es unica Pueden ser de sesion y almacenados pero no son recomendables cita requerida Efectos y caracteristicas EditarNo aceptan parametros o argumentos pero podrian 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 unicamente a traves de transacciones autonomas Pueden causar errores de mutaciones en las tablas si se han escrito de manera deficiente Ejemplo EditarUn sencillo ejemplo para SQL Server seria crear un Trigger para insertar un pedido de algun producto cuando la cantidad de este en nuestro almacen 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 ARTICULODisparadores en MySQL EditarLos disparadores son soportados en MySQL a partir de la version 5 0 2 Algunos de los soportes existentes son los disparadores para las sentencias INSERT UPDATE y DELETEEl estandar 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 esta monitoreando los cambios en la columna salario podria 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 lt gt o salario THEN END IF CREATE TRIGGER ver salario BEFORE UPDATE ON empleados REFERENCING NEW ROW AS n OLD ROW AS o FOR EACH ROW IF n salario lt gt 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 sentencia DELIMITER seguida de un caracter tal como la cual asigna la funcion del punto y coma a otro caracter permitiendo que el disparador sea escrito usando los punto y comas sin que se ejecute mientras se escribe despues de escrito el disparador se escribe nuevamente la sentencia DELIMITER para asignar al punto y coma su funcion habitual Disparadores en PostgreSQL EditarDesde 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 DELETECuando hay varios disparadores se activan en orden alfabetico Ademas de permitir el uso de funciones en el lenguaje nativo de PostgreSQL PL PgSQL los disparadores tambien permiten invocar funciones escritas en otros lenguajes como PL Perl En Postgres un disparador ejecuta una funcion la cual contiene el codigo de lo que se requiere esto difiere del metodo expuesto anteriormente para MySQL que escribe el codigo a ejecutarse dentro del mismo disparador El siguiente es un ejemplo de disparador creado con su respectiva funcion 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 gt 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 endEnlaces externos Editar 1 Disparadores en MySQL documentacion oficial Microsoft SQL Server CREATE TRIGGER en ingles Microsoft SQL Server DROP TRIGGER en ingles Sentencia DB2 CREATE TRIGGER enlace roto disponible en Internet Archive vease el historial la primera version y la ultima Oracle CREATE TRIGGER Trigger en PostgreSQL en ingles Sedna XQuery Triggers Datos Q835769 Obtenido de https es wikipedia org w index php title Trigger base de datos amp oldid 136075893, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos