disparadores trigger en sql y my sql

12
DISPARADORES TRIGGER EN SQL Y MY SQL. Sintaxis general de un disparador CREATE [OR REPLACE] TRIGGER nombre [temporalidad del evento] [granularidad del evento] [WHEN condición] BEGIN cuerpo del trigger END nombre; / CREATE SQL:

Upload: yareli

Post on 13-Jun-2015

29.105 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: Disparadores Trigger En Sql Y My Sql

DISPARADORES TRIGGER EN SQL Y MY SQL.

Sintaxis general de un disparador

CREATE [OR REPLACE] TRIGGER nombre

[temporalidad del evento]

[granularidad del evento]

[WHEN condición]

BEGIN

cuerpo del trigger

END nombre;

/

CREATE

SQL:

Page 2: Disparadores Trigger En Sql Y My Sql

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

*[temporalidad del evento]Puede tomar dos valores: BEFORE ó AFTER que indicará si el cuerpo del disparadordebe ejecutarse antes o después del evento que causa la activación del disparador.Ambos valores pueden aplicarse tanto para disparadores a nivel de fila como a nivel deorden. BEFORE/AFTER debe acompañarse de la operación que causa la activacióndel disparador. Estas pueden ser operaciones de inserción (INSERT) Y/O borrado(DELETE) y/o modificación (UPDATE) respecto a una tabla o respecto a una columnade una tabla. Cuando se quiere especificar más operación, estas se pueden unirutilizando los operadores OR y AND.Por ejemplo:BEFORE INSERT ON empleadoBEFORE INSERT OR DELETE ON empleado.

Page 3: Disparadores Trigger En Sql Y My Sql

*[granularidad del evento][WHEN condición]

Permite distinguir si el disparador es a nivel de fila o a nivel de orden. Un disparadorse define a nivel de fila cuando el cuerpo del disparador se debe aplicar fila a fila de latabla afectada y se define a nivel de orden cuando se debe aplicar a toda la tabla a lavez.Si queremos definir el disparador a nivel de fila, la granularidad deberá especificarsecon la cláusula FOR EACH ROW a la que habrá que acompañar de la condición quedebe cumplir la fila para aplicar el cuerpo del disparador. Esta condición se indica en laorden SQL mediante la cláusula WHEN condición.Cuando no exista definición del granularidad del evento, significará que el disparadorestá definido a nivel de orden.

Page 4: Disparadores Trigger En Sql Y My Sql

*BEGIN

cuerpo del trigger

END nombre;

Dentro del cuerpo de un disparador podemos incluir sentencias de borrado (DELETE),

inserción (INSERT) o modificación (UPDATE) pero también se puede poner cualquier

otra sentencia SQL (SELECT..) e incluso un programa escritoen PL/SQL. Esta última

opción se verá en la siguiente práctica.

Dentro de este cuerpo también se puede hacer referencia a las variables OLD y NEW.

Page 5: Disparadores Trigger En Sql Y My Sql

Órdenes de disparadoresEliminación de un disparadorDROP TRIGGER nombre;Habilitación/deshabilitación de un disparadorALTER TRIGGER nombre [ENABLE|DISABLE]Habilitación/deshabilitación de todos los disparadores de una tabla:ALTER TABLE nombretabla [ENABLE|DISABLE] ALL TRIGGERS;Ver todos los disparadores definidos por un usuarioSELECT TRIGGER_NAME FROM USER_TRIGGERSVer el cuerpo de un disparador:SELECT TRIGGER_BODY FROM USER_TRIGGERSWHERE TRIGGER_NAME = ‘nombre_disparador’;Ver la descripción de un disparador:SELECT DESCRIPTION FROM USER_TRIGGERSWHERE TRIGGER_NAME = ‘nombre_disparador’;

Page 6: Disparadores Trigger En Sql Y My Sql

TRIGGER EN MYSQL

Page 7: Disparadores Trigger En Sql Y My Sql

¿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 algún evento sobre dicha tabla.

Page 8: Disparadores Trigger En Sql Y My Sql

¿Cómo crear un trigger en MySQL?

La sintaxis básica para crear un trigger en MySQL es la siguiente:

CREATE TRIGGER nombre_trigger{BEFORE|AFTER} {INSERT|UPDATE|DELETE}ON nombre_tablaFOR EACH ROW BEGINsentencias_sql;END;

Page 9: Disparadores Trigger En Sql Y My Sql

BEFORE|AFTER: especifican cuando se dispara el trigger (antes de ejecutar la sentencia o después)

INSERT|UPDATE|DELETE: especifican el evento que disparará el trigger

ON nombre_tabla: indica la tabla sobre la que actúa el trigger

sentencias_sql :son las sentencias que se ejecutarán cuando se active el trigger

Page 10: Disparadores Trigger En Sql Y My Sql

Ejemplo:

Creamos 3 disparadores sobre la tabla de usuarios, estos nos dirán las acciones que se realicen sobre esta (inserción, modificación o borrado).La estructura de las tablas serán 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) );

Page 11: Disparadores Trigger En Sql Y My Sql

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 ;

Page 12: Disparadores Trigger En Sql Y My Sql

Una pequeña explicación de las sentencias utilizadas es:

DELIMITER: los disparadores (Triggers), están formados por varias instrucciones, por lo tanto, antes de comenzar su definición, debes especificar qué carácter delimita (o separa) siguiente.

CREATE TRIGGER: Es la sentencia de creación del disparador.

BEFORE: Indica el momento de acción 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 sentencia activadora