You are on page 1of 12

TRIGGER EN SQL Y MY SQL.

SQL:
Sintaxis general de un disparador CREATE [OR REPLACE] TRIGGER nombre [temporalidad del evento] [granularidad del evento] [WHEN condicin] BEGIN cuerpo del trigger END nombre; / CREATE

*CREATE [OR REPLACE] TRIGGER nombre Crea o reemplaza un disparador con el nombre especificado

*[temporalidad del evento] Puede tomar dos valores: BEFORE AFTER que indicar si el cuerpo del disparador debe ejecutarse antes o despus del evento que causa la activacin del disparador. Ambos valores pueden aplicarse tanto para disparadores a nivel de fila como a nivel de orden. BEFORE/AFTER debe acompaarse de la operacin que causa la activacin del disparador. Estas pueden ser operaciones de insercin (INSERT) Y/O borrado (DELETE) y/o modificacin (UPDATE) respecto a una tabla o respecto a una columna de una tabla. Cuando se quiere especificar ms operacin, estas se pueden unir utilizando los operadores OR y AND. Por ejemplo: BEFORE INSERT ON empleado

*[granularidad del evento] [WHEN condicin]


Permite distinguir si el disparador es a nivel de fila o a nivel de orden. Un disparador se define a nivel de fila cuando el cuerpo del disparador se debe aplicar fila a fila de la tabla afectada y se define a nivel de orden cuando se debe aplicar a toda la tabla a la vez. Si queremos definir el disparador a nivel de fila, la granularidad deber especificarse con la clusula FOR EACH ROW a la que habr que acompaar de la condicin que debe cumplir la fila para aplicar el cuerpo del disparador. Esta condicin se indica en la orden SQL mediante la clusula WHEN condicin. Cuando no exista definicin del granularidad del evento, significar que el disparador est definido a nivel de orden.

*BEGIN
cuerpo del trigger END nombre; Dentro del cuerpo de un disparador podemos incluir sentencias de borrado (DELETE), insercin (INSERT) o modificacin (UPDATE) pero tambin se puede poner cualquier otra sentencia SQL (SELECT..) e incluso un programa escritoen PL/SQL. Esta ltima opcin se ver en la siguiente prctica. Dentro de este cuerpo tambin se puede hacer referencia a las variables OLD y NEW.

rdenes de disparadores Eliminacin de un disparador DROP TRIGGER nombre; Habilitacin/deshabilitacin de un disparador ALTER TRIGGER nombre [ENABLE|DISABLE] Habilitacin/deshabilitacin de todos los disparadores de una tabla: ALTER TABLE nombretabla [ENABLE|DISABLE] ALL TRIGGERS; Ver todos los disparadores definidos por un usuario SELECT TRIGGER_NAME FROM USER_TRIGGERS Ver el cuerpo de un disparador: SELECT TRIGGER_BODY FROM USER_TRIGGERS WHERE TRIGGER_NAME = nombre_disparador; Ver la descripcin de un disparador: SELECT DESCRIPTION FROM USER_TRIGGERS WHERE TRIGGER_NAME = nombre_disparador;

TRIGGER EN MYSQL

Qu es un trigger o disparador?

Un trigger o disparador es un objeto de base de datos que se asocia a una tabla y se activa cuando se produce algn evento sobre dicha tabla.

Cmo crear un trigger en MySQL?

La sintaxis bsica para crear un trigger en MySQL es la siguiente: CREATE TRIGGER nombre_trigger {BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON nombre_tabla FOR EACH ROW BEGIN sentencias_sql; END;

BEFORE|AFTER: especifican cuando se dispara el trigger (antes de ejecutar la sentencia o despus) INSERT|UPDATE|DELETE: especifican el evento que disparar el trigger ON nombre_tabla: indica la tabla sobre la que acta el trigger sentencias_sql :son las sentencias que se ejecutarn cuando se active el trigger

Ejemplo:

Creamos 3 disparadores sobre la tabla de usuarios, estos nos dirn las acciones que se realicen sobre esta (insercin, modificacin o borrado). La estructura de las tablas sern las siguientes: /* Creamos la tabla de acciones*/ CREATE TABLE acciones( fecha DATE, hora TIME, accion VARCHAR(50), idusuario int ); /*Creamos la tabla de usuarios*/ CREATE TABLE usuarios( idusuario integer PRIMARY KEY, nombre VARCHAR(50), apellido VARCHAR(50) );

Las sentencias para los disparadores son:


/*Disparador para el registro de inserciones*/ DELIMITER | CREATE TRIGGER inser_usuarios BEFORE INSERT ON usuarios FOR EACH ROW BEGIN INSERT INTO acciones VALUES(CURDATE(),CURTIME(),'Registro insertado',new.idusuario); END; | DELIMITER ;

/*Disparador para el registro modificado*/ DELIMITER | CREATE TRIGGER update_usuarios BEFORE UPDATE ON usuarios FOR EACH ROW BEGIN INSERT INTO acciones VALUES(CURDATE(),CURTIME(),'Registro Modificado',old.idusuario); END; | DELIMITER ;

/*Disparador para el registro eliminado*/

DELIMITER | CREATE TRIGGER delete_usuarios BEFORE DELETE ON usuarios FOR EACH ROW BEGIN INSERT INTO acciones VALUES(CURDATE(),CURTIME(),'Registro eliminado',old.idusuario); END; | DELIMITER ;

Una pequea explicacin de las sentencias utilizadas es:

DELIMITER: los disparadores (Triggers), estn formados por varias instrucciones, por lo tanto, antes de comenzar su definicin, debes especificar qu carcter delimita (o separa) siguiente. CREATE TRIGGER: Es la sentencia de creacin del disparador. BEFORE: Indica el momento de accin del disparador DELETE: Indica el evento que activar al disparador FOR EACH ROW: Define lo que se ejecutar cada vez que el disparador se active, lo cual ocurre una vez por cada fila afectada por la

You might also like