Tablas que usare dentro del proyecto hechas con la herramienta de DB designer que pasa un modelo MER a archivos .sql create table autor ( id_autor int not null primary key, nombre_autor varchar(150) not null, nacimiento date not null, fallecimiento date ); create table libro ( id_libro int not null primary key, titulo varchar(150) not null, categoria varchar(100) not null, year_publicacion date not null, id_autor int not null, foreign key (id_autor) references autor(id_autor) ); create table estudiante ( id_estudiante int not null primary key, nombre_estudiante varchar(150) not null, carrera varchar(100) not null, correo varchar(150) not null ); create table prestamo ( id_prestamo int not null auto_increment primary key, id_libro int not null, id_estudiante int not null, fecha_pres date not null, fecha_devo date not null, foreign key (id_libro) references libro(id_libro), foreign key (id_estudiante) references estudiante(id_estudiante) ); /*datos a usar en las tablas: insert into autor (id_autor, nombre_autor, nacimiento, fallecimiento) values (1, 'gabriel garcía márquez', '1927-03-06', '2014-04-17'), (2, 'isabel allende', '1942-08-02', null), (3, 'j. k. rowling', '1965-07-31', null), (4, 'george orwell', '1903-06-25', '1950-01-21'), (5, 'mario vargas llosa', '1936-03-28', null), (6, 'julio verne', '1828-02-08', '1905-03-24'); insert into libro (id_libro, titulo, categoria, year_publicacion, id_autor) values (1, 'cien años de soledad', 'novela', '1967-06-05', 1), (2, 'el amor en los tiempos del cólera', 'novela', '1985-09-05', 1), (3, 'la casa de los espíritus', 'novela', '1982-01-01', 2), (4, 'harry potter y la piedra filosofal', 'fantasía', '1997-06-26', 3), (5, 'harry potter y la cámara secreta', 'fantasía', '1998-07-02', 3), (6, '1984', 'distopía', '1949-06-08', 4), (7, 'rebelión en la granja', 'sátira', '1945-08-17', 4), (8, 'la ciudad y los perros', 'novela', '1963-01-01', 5), (9, 'la guerra del fin del mundo', 'novela histórica', '1981-01-01', 5), (10, 'viaje al centro de la tierra', 'ciencia ficción', '1864-11-25', 6); insert into estudiante (id_estudiante, nombre_estudiante, carrera, correo) values (1, 'laura gómez', 'ingeniería de sistemas', 'laura.gomez@uni.edu'), (2, 'andrés pérez', 'derecho', 'andres.perez@uni.edu'), (3, 'maría rodríguez', 'medicina', 'maria.rodriguez@uni.edu'), (4, 'carlos lópez', 'arquitectura', 'carlos.lopez@uni.edu'); insert into prestamo (id_libro, id_estudiante, fecha_pres, fecha_devo) values (1, 1, '2025-08-01', '2025-08-15'), (4, 2, '2025-08-05', '2025-08-20'); -- laura pidió "cien años de soledad" -- andrés pidió "harry potter y la piedra filosofal" */ Triggers Primero con el de before. Lo que tengo en mente es que la funcion del trigger sea evitar que se pueda prestar un libro que ya ha sido prestado: DELIMITER // create trigger before_prestamo_insert before insert on prestamo for each row begin -- si el libro ya está prestado en las fechas que pide el estudiante, no permitir if exists ( select 1 from prestamo where id_libro = new.id_libro and fecha_devo >= new.fecha_pres ) then signal sqlstate '45000' set message_text = 'el libro ya está prestado en ese periodo.'; end if; end// DELIMITER ; insert into prestamo (id_libro, id_estudiante, fecha_pres, fecha_devo) values (1, 2, '2025-08-09', '2025-08-25'); Trigger con After usare la tabla prestamos y creare una nueva tambien: create table prestamos_eliminados ( id_prestamo int, id_libro int, id_estudiante int, fecha_pres date, fecha_devo date, usuario varchar(50), fecha_modif datetime ); DELIMITER // create trigger auditar_prestamo after delete on prestamo for each row begin insert into prestamos_eliminados (id_prestamo, id_libro, id_estudiante, fecha_pres, fecha_devo, usuario, fecha_modif) values (old.id_prestamo, old.id_libro, old.id_estudiante, old.fecha_pres, old.fecha_devo, current_user(), now()); end// DELIMITER ;