Hoja de ejercicios seis del tema 6/7.
Para estos ejercicios usaremos el script primeros_pasos.sql (lo puedes descargar aquí).
Ejercicio 25
Realizar dos triggers que completen la funcionalidad del trigger1 del apartado 9.3 de los materiales, manteniendo sincronizada la tabla alumnos_replica, pero para las operaciones de modificación (trigger ejercicio25a) y borrado (trigger ejercicio25b).
Antes de realizar el ejercicio necesitarás tener creada la tabla:
CREATE TABLE alumnos_replica
(id INT PRIMARY KEY,
alumno VARCHAR(30))
ENGINE=innodb;
-- Creo tabla alumnos
create table alumnos
(id int primary key, alumno varchar(30))
engine=innodb;
-- Creo la tabla donde realizaré el volcado de datos
create table alumnos_replica
(id int primary key,
alumno varchar(30))
engine=innodb;
delimiter $$
-- Trigger para la inserción de filas (apartado 9.3)
create trigger veinticincoA
after insert on alumnos
for each row
begin
insert into alumnos_replica values(new.id, new.alumno);
end $$
-- Trigger para la eliminación de filas
create trigger veinticincoB
after delete on alumnos
for each row
begin
delete from alumnos_replica where id = old.id;
end $$
-- Trigger para la actualización de filas
create trigger veinticincoC
after update on alumnos
for each row
begin
update alumnos_replica
set id = new.id, alumno = new.alumno
where id = old.id;
end $$
delimiter ;
Ejercicio 26
Realizar tres triggers ejercicio26a, ejercicio26b y ejercicio26c que realicen una auditoría similar a la que realiza el trigger2 del apartado 9.3 de los materiales, pero para la tabla centros:
- El trigger
ejercicio26aauditará las operaciones de inserción. - El trigger
ejercicio26bauditará las operaciones de modificación. - El trigger
ejercicio26cauditará las operaciones de borrado.
Antes de realizar el ejercicio necesitarás tener creada la tabla:
CREATE TABLE AUDITA (mensaje VARCHAR(200));
-- Creo tabla para la auditoría
create table audita
(mensaje varchar(100));
delimiter $$
-- Trigger de inserción
create trigger ejercicio26a
after insert on centros
for each row
begin
insert into audita
values (concat('Inserción realizada por ', user(),
' en fecha ', now(),
'. Valores insertados: ', new.numce, ', ', new.nomce, ' y ', new.seas));
end $$
-- Trigger de actualización
create trigger ejercicio26b
after update on centros
for each row
begin
insert into audita
values (concat('Modificación realizada por ', user(),
' en fecha ', now(),
'. Valores antiguos: ', old.numce, ', ', old.nomce, ' y ', old.seas,
'. Valores nuevos: ', new.numce, ', ', new.nomce, ' y ', new.seas));
end $$
-- Trigger de borrado
create trigger ejercicio26c
after delete on centros
for each row
begin
insert into audita
values (concat('Borrado realizado por ', user(),
' en fecha ', now(),
'. Valores borrados: ', old.numce, ', ', old.nomce, ' y ', old.seas));
end $$
delimiter ;