Está en la página 1de 5

TECNOLGICO DE ESTUDIOS SUPERIORES DE JILOTEPEC

INGENIERIA EN SISTEMAS COMPUTACIONALES

SISTEMAS DISTRIBUIDOS.

PROYECTO:

TRIGGER

ALUMNO:

IVAN ORTEGA MARTINEZ

PROFESOR:

ING. MANUEL ALCANTARA RUIZ

JILOTEPEC, EDO. DE MXICO

16 de Octubre de 2012.

TRIGGER
Trigger: Tambin llamado disparador, es una rutina autnoma asociada con una tabla o vista que automticamente realiza una accin cuando una fila en la tabla o la vista se inserta (INSERT), se actualiza (UPDATE) o borra (DELETE). Un trigger nunca se llama directamente, en cambio, cuando una aplicacin o un usuario intenta insertar, actualizar o anular una fila en una tabla, la accin definida en el disparador se ejecuta automticamente (se dispara o ejecuta). No puede haber dos disparadores en una misma tabla que correspondan al mismo momento y sentencia. Son usados para mejorar la administracin de la Base de datos, sin necesidad de contar con que el usuario ejecute la sentencia. Adems, pueden generar valores de filas, previene errores de datos, sincroniza tablas, modifica valores de una vista, etc. Permite implementar programas basados en paradigma lgico (sistemas expertos, deduccin).

SINTAXIS.
CREATE TRIGGER nombre_disp momento_disp evento_disp ON nombre_tabla FOR EACH ROW sentencia_disp

Dnde: 1. CREATE TRIGGER nombre_disp momento_disp evento_disp: momento_disp: Es el momento en que el disparador entra en accin. Puede ser BEFORE (antes) o AFTER (despues), para indicar que el disparador se ejecute antes o despus que la sentencia que lo activa. evento_disp: Indica la clase de sentencia que activa al disparador. Puede ser INSERT, UPDATE, o DELETE. Por ejemplo, un disparador BEFORE para sentencias INSERT podra utilizarse para validar los valores a insertar. 2. ON nombre_tabla: nombre_tabla: El disparador queda asociado a la tabla. Esta debe ser una tabla permanente, no puede ser una tabla TEMPORARY ni una vista. 3. FOR EACH ROW sentencia_disp: sentencia_disp: Es la sentencia que se ejecuta cuando se activa el disparador. Si se desean ejecutar mltiples sentencias, deben colocarse entre BEGIN ... END, el constructor de sentencias compuestas. Esto adems posibilita emplear las mismas sentencias permitidas en rutinas almacenadas.

NOTA: Para eliminar un trigger se utilizar la sintaxis DROP TRIGGER (nombre);

ESTRUCTURA. 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.

VENTAJAS. Las ventajas de usar los Disparadores son:


La entrada en vigor automtica de restricciones de los datos, hace que los usuarios entren slo valores vlidos. El mantenimiento de la aplicacin se reduce, los cambios a un disparador se refleja automticamente en todas las aplicaciones que tienen que ver con la tabla sin la necesidad de recompilar. Una aplicacin puede guardar un registro corriente de cambios, creando un disparador que se active siempre que una tabla se modifique. La notificacin automtica de cambios a la Base de Datos con alertas de evento en los disparadores.

TIPOS. 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 n-veces si se llama n-veces 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.

EFECTOS Y CARACTERSTICAS.

No aceptan parmetros o argumentos (pero podran almacenar los datos afectados en tablas temporales) No pueden ejecutar las operaciones COMMIT o ROLLBACK por que 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.

CREACION DE LAS TABLAS: CREATE TABLE test1(a1 INT); CREATE TABLE test2(a2 INT); CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY); CREATE TABLE test4( a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b4 INT DEFAULT 0 ); DECLARACIN DEL TRIGGER: DELIMITER | CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW BEGIN INSERT INTO test2 SET a2 = NEW.a1; DELETE FROM test3 WHERE a3 = NEW.a1; UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1; END | INSERTAR VALORES: DELIMITER ; INSERT INTO test3 (a3) VALUES (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL); INSERT INTO test4 (a4) VALUES (0), (0), (0), (0), (0), (0), (0), (0), (0), (0); INSERT INTO test1 VALUES (1), (3), (1), (7), (1), (8), (4), (4); RESULTADOS: SELECT * FROM test1; +------+ | a1 | +------+ | 1 | | 3 | | 1 | | 7 | | 1 | | 8 | | 4 | | 4 | +------+

SELECT * FROM test2; +------+ | a2 | +------+ | 1 | | 3 | | 1 | | 7 | | 1 | | 8 | | 4 | | 4 | +------+ SELECT * FROM test3; +----+ | a3 | +----+ | 2 | | 5 | | 6 | | 9 | | 10 | +----+ SELECT * FROM test4; +----+------+ | a4 | b4 | +----+------+ | 1 | 3 | | 2 | 0 | | 3 | 1 | | 4 | 2 | | 5 | 0 | | 6 | 0 | | 7 | 1 | | 8 | 1 | | 9 | 0 | | 10 | 0 | +----+------+