Triggers o Disparadores en MySQL
Base de Datos
TRIGGERS TRIGGERS O DISPARADORES Un trigger (o disparador) en una Base de datos , es un procedimiento que se ejecuta cuando se cumple una condición establecida al realizar una operación de inserción (INSERT), actualización (UPDATE) o borrado (DELETE).
Usos Son usados para mejorar la administración de la Base de datos, sin necesidad de contar con que el usuario ejecute la sentencia de SQL. Además, pueden generar valores de columnas, previene errores de datos, sincroniza tablas, modifica valores de una vista, etc. Permite implementar programas basados en paradigma lógico (sistemas expertos, deducción).
Componentes principales La estructura básica de un trigger es: y y
y
Llamada d e ac tiv ac ión tiv ac ión: es la sentencia que permite "disparar" el código a ejecutar. cc ión Restri cc ión: es la condición necesaria para realizar el código. Esta restricción puede ser de tipo condicional o de tipo nulidad. ión a ejecut ar : es la secuencia de instrucciones a ej ecutar una vez que se han cumplido Acc ión las condiciones iniciales.
Tipos Existen dos tipos de disparadores que se clasifican según la cantidad de ejecuciones a realizar: y
y
Dispar ad ad ores d e f i ila): l a): son aquellas que se ejecutaran n-veces si se llama n-veces desde la tabla asociada al trigger ad ores d e secuenc i ia): a St atement T Triggers r iggers ( o Dispar ad ): son áquellos que sin importar la cantidad de veces que se cumpla con la condición, su e jecución es única.
RowT riggers riggers ( o
Pueden ser de sesión y almacenados; pero no son de fiar
Ef ectos ectos y características y
y
y
No aceptan parámetros o argumentos (pero podrían almacenar los datos afectados en tablas temporales) No pueden ejecutar las operaciones COMMIT o ROLLBA CK por que estas son parte de la 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. Prof. Sergio Ernesto Moreno Soto
Triggers o Disparadores en MySQL
Base de Datos
Disparadores en MySQL Los disparadores son soportados en MySQL a partir de la versión 5.0.2. Algunos de los soportes existentes están los disparadores para las sentencias INSERT, UPDATE y DELETE 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 función 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; después de escrito el disparador se escribe nuevamente la sentencia DELIMITER ; para asignar al punto y coma su función habitual. EJEMP LO
Para realizar la demostración de la aplicación de los disparadores en MySQL debemos de crear dos tablas una llamada Empleados y otra Auditoria. El trigger o disparador lo vamos crear en la tabla empleado de tal forma que cuando se ingrese un nuevo empleado en la tabla auditoria se registre la f echa y la hor a en la cual quedo registrado el nuevo empleado. Como se muestra a continuación.
CREATE TABLE empleados ( emp_noint(11) NOT NULL, apellidosvarchar(50) DEFAULT NULL, salarioint(11) DEFAULT NULL, PRIMARY KEY (emp_no));
CREATE TABLE auditoria ( fecha date DEFAULT NULL, hora time DEFAULT NULL); A continuacion se muestra el codigopara crear el trigger en la tabla Empleado para ello te mostramos las palabras clave que se utilizan en la declaración del disparador
BEFORE FOR EACH ROW BEGIN
ANTES PARA CADA FILA COMENZAR
Prof. Sergio Ernesto Moreno Soto
Triggers o Disparadores en MySQL
Base de Datos
La generacion del trigger es de la siguiente forma: DELIMITER|
disparador CREATETRIGGER BEFORE INSERT ON empleadosFOR EACH ROW BEGING INSERTINTO auditoria VALUES (curdate(),curtime()); END |DELIMITER;
Realiza el ingreso de un nuevo Empleado y después genera una consulta a la tabla Auditoria para que puedas visualizar el resultado.
E jempl o
2:
El siguiente ejemplo muestra la aplicación de triggersanclado a una sola tabla llamada test1. El trigger INSERTA datos en una segunda tabla llamada test2, ELIMINA datos de la tabla test3 y ACTUALIZA la tabla test4.
CREATE table test1 (a1 INT); CREATE table test2 (a2 INT); CREATE table test3 (a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY); CREATE table test4 ( a4INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b4INT DEFAULT 0); 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 |DELIMITER;
Prof. Sergio Ernesto Moreno Soto
Triggers o Disparadores en MySQL
Base de Datos
Antes de crear registros en la table test1, debemos insertar algunos valores en las tablas test3 y test4.
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); insertinto test1 values (1),(3),(1),(7),(1),(8),(4),(4);
Realiza las siguientes consultas.
select *from test1;
select *from test2;
select *from test3;
select *from test4;
EXAMEN: Diseñe un ejemplo de su interés con nuevas tablas donde aplique vistas y triggers. BIBLIOGRAFÍA. http://es.wikipedia.org/wiki/Trigger_(base_de_datos) http://dev.mysql.com/doc/refman/5.0/es/triggers.html Prof. Sergio Ernesto Moreno Soto