Академический Документы
Профессиональный Документы
Культура Документы
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
*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.
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) );
/*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 ;
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 ;
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