2. Son procedimientos que se ejecutan
cumple una condición establecida.
automáticamente cuando se
Los triggers pueden ser de:
Inserción (INSERT)
Actualización (UPDATE)
Eliminación (DELETE).
NOTA: Para poder crear el Disparador hay que tener presente:
Deben existir las Tablas Asociadas a el Disparador
El Disparador no debe tener un nombre asociado a una palabra
reservada del sistema.
Se debe previamente modificar el comodín de ejecución de
comandos que esta por defecto (;). para ello utilizamos
DELIMITER @
OJO --> no es obligatorio - @ - puede ser
cualquier comodín
No se permite dentro de la Sentencia del trigger ejecutar un
comando Select.
No se admiten más de un trigger que relacionen a una misma
tabla con la misma acción. Hasta ahora versión del Ejemplo
5.5.24 año 2013
DELIMITER @
CREATE trigger nombre_trigger [before, after] [insert, update, delete] ON tabla
For Each Row
Begin
Sentencia a Ejecutar [insert, update, delete]
End;
@
DELIMITER ;
3. CREATE database IF NOT EXISTS bdTrigger;
USE bdTrigger;
CREATE TABLE IF NOT EXISTS tb_cliente
(
id_orden INT NOT NULL auto_increment,
documento VARCHAR(12),
nombre VARCHAR(25) NOT NULL,
apellido VARCHAR(35)NOT NULL,
telefono VARCHAR(15),
email VARCHAR(50),
PRIMARY KEY(id_orden,documento)
)engine=InnoDB;
/* En esta tabla guardaremos el respaldo de los datos luego de ejecutar una
instrucción en la tabla tb_cliente mediante el Disparador*/
CREATE TABLE IF NOT EXISTS tb_seguridad_cliente
(
documento_c VARCHAR(12),
nombre_c VARCHAR(25),
apellido_c VARCHAR(35),
telefono_c VARCHAR(15),
email_c VARCHAR(50),
fecha_accion_c DATE,
accion_c VARCHAR(11) /* Agregado, Modificado, Cancelado-0-(Eliminado)*/
)engine=InnoDB;
4.
5.
6. NOTA:
El comando new nos permite referenciar al valor que viene por primera
vez, seguido por el nombre del campo que deseamos tomar de la tabla a
la cual definimos en el disparador al momento de crearlo (tb_cliente)
Si lo que deseamos es INSERTAR (insert) solamente podemos utilizamos
el comando new.
Si lo que deseamos es ACTUALIZAR (update) podremos utilizar los dos
comandos permitidos new y old.
Si usamos -- old -- hacemos referencia al dato que contenía el registro
antes de modificarlo.
si lo que deseamos es ELIMINAR (delete) solamente podemos utilizar el
comando old.
/* Trigger que se acciona luego de INSERTAR algún registro en la Tabla
tb_cliente*/
DELIMITER @
CREATE TRIGGER tr_insert_cliente BEFORE INSERT ON tb_cliente
FOR EACH ROW
BEGIN
INSERT INTO tb_seguridad_cliente VALUES ( new.documento, new.nombre,
new.apellido, new.telefono, new.email,
curdate(),'Agregado');
END;
@
DELIMITER ;
7. /* Trigger que se acciona luego de ACTUALIZAR algún registro en la
Tabla tb_cliente*/
DELIMITER @
CREATE TRIGGER tr_update_cliente BEFORE UPDATE ON tb_cliente
FOR EACH ROW
BEGIN
INSERT INTO tb_seguridad_cliente VALUES (new.documento, new.nombre,
new.apellido, new.telefono, new.email, curdate(), 'Modificado');
END;
@
DELIMITER ;
/* Trigger que se acciona luego de ELIMINAR algún registro en la Tabla
tb_cliente*/
DELIMITER @
CREATE TRIGGER tr_delete_cliente BEFORE DELETE ON tb_cliente
FOR EACH ROW
BEGIN
INSERT INTO tb_seguridad_cliente VALUES(old.documento, old.nombre,
old.apellido, old.telefono, old.email, curdate(),'Eliminado');
END;
@
DELIMITER ;
11. /* Modificamos clientes para verificar que el Dispardor
-- tr_update_cliente -- Funcione correctamente */
UPDATE tb_cliente SET documento='i065 -mod', nombre='nombre j22 mod',
apellido='apellido mod', telefono='tel mod' WHERE id_orden = 7;
/* Eliminamos clientes para verificar que el Dispardor
-- tr_delete_cliente -- Funcione correctamente */
DELETE FROM tb_cliente WHERE id_orden = 9;
12. /* Ahora si consultamos la tabla de tb_seguridad_cliente podremos
observar que automáticamente se han guardado los datos, sin
necesidad de hacerlo mediante código otra vez */
SELECT DISTINCT(documento_c), nombre_c, apellido_c, accion_c FROM
tb_seguridad_cliente;
/* Para MOSTRAR los Disparadores - triggers empleamos el
comando: Show triggers; */
Show triggers;
13. /* Para BORRAR los Disparadores - triggers empleamos el comando:
Drop trigger nombre_trigger; */
DROP TRIGGER tr_cliente;