
Base de Datos II
Parcila#I
Introduce un texto aquí...
BD Fechas
tablas Pagos
Identi descripcion fechaadquisicion
0001 Chasis 2012-09-02
0002 mouse 2013-07-29
0003 teclado 2012-06-04
0004 ram 2012-03-27
0005 Memoria usb 2012-12-06
0006 ups 2012-03-25
0007 regulador voltaje 2012-05-08
0008 cableado 2012-04-24
0009 Tablet 2012-08-10
0010 Escanner 2012-03-21
0011 lapiz optico 2012-02-12
0012 Procedador pentium 2012-06-19
0013 Procesador SN 2012-04-14
0014 Unidad CD 2012-09-17
0015 hub 2012-01-16
0016 Multifuncional 2013-04-15
0017 Camara 2013-03-18
0018 Board 2013-01-13
0019 impresora laser 2013-10-20
0020 Fuente 2013-07-11
0021 disco duro 2013-11-22
Realizar- Que articulos fueron adquiridos antes del 6 mes del 2012.
- Determinar el articulo que tiene fecha mas antigua de adquisición.
- Seleccionar los articulos que terminan en en (o) y (m).
- Listar los productos que tienen al final consonante.
- Si las fechas de adquisición es en el primer semestre del año, se daran 5 meses para el pago
- Si las fechas de adquisición es en el segundo semestre del año, se daran 8 meses de plazo
Que articulos fueron adquiridos antes del 6 mes del 2012.
1. ¿Qué desea mostrar?
Artículos adquiridos antes del 1 de junio de 2012.
Los campos a mostrar son: Identi, descripcion y fechaadquisicion.
2. Tablas involucradas:
Pagos
4. Función a utilizar:
WHERE: Para filtrar los registros cuya fecha de adquisición sea anterior al 1 de junio de 2012.
SELECT: Para seleccionar las columnas deseadas (Identi, descripcion, fechaadquisicion).
5. Código:
select Identi, descripcion, fechaadquisicion from pagos whe
re fechaadquisicion < '2012-06-01';

Determinar el articulo que tiene fecha mas antigua de adquisición.
1. ¿Qué desea mostrar?
El artículo con la fecha de adquisición más antigua.
Los campos a mostrar son: Identi, descripcion y fechaadquisicion.
2. Tablas involucradas:
Pagos:
3. Relaciones:
No hay
4. Función a utilizar:
MIN(): Para encontrar la fecha más antigua.
WHERE: Para filtrar el registro que coincida con la fecha más antigua.
SELECT: Para seleccionar las columnas deseadas (Identi, descripcion, fechaadquisicion).
5. Código:
select Identi, descripcion, fechaadquisicion from pagos where fechaadquisicion = (SELECT MIN(fechaadquisicion) FROM Pagos);

Seleccionar los articulos que terminan en en (o) y (m).
1. ¿Qué desea mostrar?
Artículos cuyas descripciones terminan en "o" o "m".
Los campos a mostrar son: Identi, descripcion y fechaadquisicion.
2. Tablas involucradas:
Pagos:
3. Relaciones:
No hay
4. Función a utilizar:
LIKE: Para buscar patrones en la columna descripcion.
OR: Para combinar las condiciones de búsqueda de palabras que terminan en "o" o "m".
SELECT: Para seleccionar las columnas deseadas (Identi, descripcion, fechaadquisicion).
5. Código:
select Identi, descripcion, fechaadquisicion from pagos where descripcion LIKE '%o' OR descripcion LIKE '%m';

Listar los productos que tienen al final consonante.
1. ¿Qué desea mostrar?
Productos cuyas descripciones terminan en una consonante.
Los campos a mostrar son: Identi, descripcion y fechaadquisicion.
2. Tablas involucradas:
Pagos:
3. Relaciones:
No hay
4. Función a utilizar:
LIKE: Para buscar patrones en la columna descripción.
NOT LIKE: Para excluir las vocales al final de la descripción.
AND: Para combinar múltiples condiciones.
SELECT: Para seleccionar las columnas deseadas (Identi, descripcion, fechaadquisicion).
5. Código:
SELECT Identi, descripcion, fechaadquisicion
-> FROM Pagos
-> WHERE descripcion NOT LIKE '%a'
-> AND descripcion NOT LIKE '%e'
-> AND descripcion NOT LIKE '%i'
-> AND descripcion NOT LIKE '%o'
-> AND descripcion NOT LIKE '%u';

Si las fechas de adquisición es en el primer semestre del año, se darán 5 meses para el pago
1. ¿Qué desea mostrar?
Artículos adquiridos en el primer semestre del año (enero a junio).
La fecha límite de pago, que será 5 meses después de la fecha de adquisición.
Los campos a mostrar son: Identi, descripcion, fechaadquisicion y fecha_limite_pago.
2. Tablas involucradas:
Pagos:
3. Relaciones:
No hay
4. Función a utilizar:
DATE_ADD(): Para agregar 5 meses a la fecha de adquisición.
MONTH(): Para filtrar las fechas que están dentro del primer semestre (enero a junio).
SELECT: Para seleccionar las columnas deseadas (Identi, descripcion, fechaadquisicion, fecha_limite_pago).
5. Código:
SELECT Identi, descripcion, fechaadquisicion,
-> DATE_ADD(fechaadquisicion, INTERVAL 5 MONTH) AS fecha_limite_pago
-> FROM Pagos
-> WHERE MONTH(fechaadquisicion) BETWEEN 1 AND 6;

Si las fechas de adquisición es en el segundo semestre del año, se daran 8 meses de plazo
1. ¿Qué desea mostrar?
Artículos adquiridos en el segundo semestre del año (julio a diciembre).
La fecha límite de pago, que será 8 meses después de la fecha de adquisición.
Los campos a mostrar son: Identi, descripcion, fechaadquisicion y fecha_limite_pago.
2. Tablas involucradas:
Pagos:
3. Relaciones:
No hay
4. Función a utilizar:
DATE_ADD(): Para agregar 8 meses a la fecha de adquisición.
MONTH(): Para filtrar las fechas que están dentro del segundo semestre (julio a diciembre).
SELECT: Para seleccionar las columnas deseadas (Identi, descripcion, fechaadquisicion, fecha_limite_pago).
5. Código:
SELECT Identi, descripcion, fechaadquisicion,
-> DATE_ADD(fechaadquisicion, INTERVAL 8 MONTH) AS fecha_limite_pago
-> FROM Pagos
-> WHERE MONTH(fechaadquisicion) BETWEEN 7 AND 12;

FechasCol:
//----------------//---------------------------//----------------------//-------------------//----------------//-
1. Total de estudiantes nacidos en los a os 70.
2. Consultar a los estudiantes que tienen entre 16 y 20 a os.
3. Consultar los nombres de los estudiantes que son mayores de 25 a os.
4. Calcular la edad de cada estudiante.
6. Consultar las materias que tienen precio mayor a 300000 y sacar un mensaje que diga si pasa de 300000 cara de lo contrario econ mica.
7. Agregar el campo edad a la tabla estudiante, insertar las edades respectivas y si el estudiante pasa de 30 a os sacar un mensaje que diga hombre mayor, de lo contrario joven en desarrollo.
8.Consultar las materias que tienen precio mayor a 200000 y menor igual a 300000, y sacar un mensaje que diga materia economica si esta entre 200000 y 300000 de lo contrario cara.
//////////////////////////////#########################################################################################
- cuantas mujeres tiene su nombre terminado en z
- total de personas nacidas en los a os 70's se;
- listar las personas con edad entre 25 y 30 a os
- cuantos hijos existen en el total de datos
- agrupar por numero de hijos
- cuantas personas tiene el nombre carlos
- total de mujeres menores o = de 22 a os
- total de hombre mayores de 30 a os que tengan mas de 1 hijo
- cuantas mujeres mayores de 25 a os edad tiene entre 1 y 3 hijos
-mostrar la fecha del sistema.
- Visualizar la hora actual del sistema
1. Total de estudiantes nacidos en los a os 70.
1. ¿Qué desea mostrar?
El número total de estudiantes que nacieron en la década de 1970
2. Tablas involucradas:
estudiante:
3. Relaciones:
No
4. Función a utilizar:
COUNT(*): Para contar el número de estudiantes que cumplen con la condición.
BETWEEN: Para filtrar las fechas de nacimiento dentro del rango de los años 70.
5. Código:
select count(*) AS total_estudiantes_70s from estudiante where year(fechanacimiento) between '1970-01-01' and '1979-12-31';

2. Consultar a los estudiantes que tienen entre 16 y 20 a os.
1. ¿Qué desea mostrar?
Los estudiantes cuya edad esté entre 16 y 20 años.
2. Tablas involucradas:
estudiante:
3. Relaciones:
No
4. Funciones a utilizar:
YEAR(CURDATE()): Obtiene el año actual.
YEAR(fechanacimiento): Obtiene el año de nacimiento del estudiante.
BETWEEN: Filtra los resultados dentro de un rango específico.
5. Código:
select * from estudiante where year(CURDATE()) - year(fe
chanacimiento) between '16' and '20';
Empty set (0.000 sec)
NO HAY ESTUDIANTES ENTRE 16 A 20 AÑOS
3. Consultar los nombres de los estudiantes que son mayores de 25 a os.
1. ¿Qué desea mostrar?
Los nombres de los estudiantes cuya edad sea mayor a 25 años.
2. Tablas involucradas:
estudiante:
3. Relaciones:
No.
4. Funciones a utilizar:
YEAR(CURDATE()): Obtiene el año actual.
YEAR(fechanacimiento): Obtiene el año de nacimiento del estudiante.
BETWEEN: Filtra los resultados dentro de un rango específico.
5. Código:
SELECT nombre
FROM estudiante
WHERE YEAR(CURDATE()) - YEAR(fechanacimiento) > 25;

4. Calcular la edad de cada estudiante.
1. ¿Qué desea mostrar?
El nombre de cada estudiante junto con su edad calculada a partir de su fecha de nacimiento (fechanacimiento).
2. Tablas involucradas:
estudiante:
3. Relaciones:
No.
4. Funciones a utilizar:
CURDATE(): Devuelve la fecha actual.
DATEDIFF(fecha1, fecha2): Calcula la diferencia en días entre dos fechas.
FLOOR(): Redondea hacia abajo un número decimal para obtener un valor entero.
AS: Asigna un alias a una columna calculada para que sea más legible.
5. Código:
SELECT nombre,
FLOOR(DATEDIFF(CURDATE(), fechanacimiento) / 365) AS edad
FROM estudiante;

5.Consultar las materias que tienen precio mayor a 300000 y sacar un mensaje que diga si pasa de 300000 cara de lo contrario económica.
1. ¿Qué desea mostrar?
El ID de la materia (codigom), su descripción (descripcion), el valor (valor) y un mensaje que indique si es "cara" o "económica".
2. Tablas involucradas:
materia:
3. Relaciones:
No
4. Funciones a utilizar:
CASE: Permite realizar una evaluación condicional y devolver un valor basado en el resultado.
Operadores de comparación: Para comparar el valor de la materia con 300,000.
5. Código:
SELECT codigom, descripcion, valor,
CASE
WHEN valor > 300000 THEN 'cara'
ELSE 'económica'
END AS tipo_materia
FROM materia;

7. Agregar el campo edad a la tabla estudiante, insertar las edades respectivas y si el estudiante pasa de 30 a os sacar un mensaje que diga hombre mayor, de lo contrario joven en desarrollo.
1. ¿Qué desea lograr?
Agregar un nuevo campo llamado edad a la tabla estudiante.
Calcular la edad de cada estudiante a partir de su fecha de nacimiento
Mostrar un mensaje que indique si el estudiante es "hombre mayor" (si tiene más de 30 años) o "joven en desarrollo" (si tiene 30 años o menos).
2. Tablas involucradas:
estudiante:
3. Relaciones:
No
4. Funciones a utilizar:
ALTER TABLE: Para agregar una nueva columna (edad) a la tabla estudiante.
UPDATE: Para actualizar el campo edad con la edad calculada de cada estudiante.
DATEDIFF: Para calcular la diferencia en días entre la fecha actual y la fecha de nacimiento.
FLOOR: Para redondear hacia abajo y obtener la edad en años completos.
CASE: Para mostrar un mensaje condicional basado en la edad.
5. Código:
-- Paso 1: Agregar el campo edad
ALTER TABLE estudiante
ADD COLUMN edad INT;
-- Paso 2: Actualizar las edades
UPDATE estudiante
SET edad = FLOOR(DATEDIFF(CURDATE(), fechanacimiento) / 365);
-- Paso 3: Consultar con mensaje condicional
SELECT nombre, edad,
CASE
WHEN edad > 30 THEN 'hombre mayor'
ELSE 'joven en desarrollo'
END AS mensaje
FROM estudiante;
8.Consultar las materias que tienen precio mayor a 200000 y menor igual a 300000, y sacar un mensaje que diga materia económica si esta entre 200000 y 300000 de lo contrario cara.
1. ¿Qué desea mostrar?
El código de la materia (codigom), su descripción (descripcion), el valor (valor) y un mensaje que indique si es "materia económica" (si el precio está entre 200,000 y 300,000) o "cara" (si el precio está fuera de ese rango).
2. Tablas involucradas:
materia:
3. Relaciones:
No
4. Funciones a utilizar:
CASE: Permite realizar una evaluación condicional y devolver un valor basado en el resultado.
Operadores de comparación: Para comparar el valor de la materia con los rangos especificados.
5. Código:
SELECT codigom, descripcion, valor,
-> CASE
-> WHEN valor > 200000 AND valor <= 300000 THEN 'materia económica'
-> ELSE 'cara'
-> END AS tipo_materia
-> FROM materia;

------------------------------------//---------------------------------//-----------------------------
TABLA REPASO2:
- cuantas mujeres tiene su nombre terminado en z
- total de personas nacidas en los a os 70's se;
- listar las personas con edad entre 25 y 30 a os
- cuantos hijos existen en el total de datos
- agrupar por numero de hijos
- cuantas personas tiene el nombre carlos
- total de mujeres menores o = de 22 a os
- total de hombre mayores de 30 a os que tengan mas de 1 hijo
- cuantas mujeres mayores de 25 a os edad tiene entre 1 y 3 hijos
-mostrar la fecha del sistema.
- Visualizar la hora actual del sistema
- cuantas mujeres tiene su nombre terminado en z
1. ¿Qué desea mostrar?
El número de mujeres cuyo nombre termina con la letra "z".
2. Tablas involucradas:
Repaso2:
3. Condiciones:
Sexo: Debe ser "mujer".
Nombre: Debe terminar con la letra "z".
4. Funciones a utilizar:
COUNT: Para contar el número de registros que cumplen con las condiciones.
LIKE: Para filtrar nombres que terminen con la letra "z".
5. Código:
SELECT COUNT(*) AS mujeres_nombre_termina_z
-> FROM Repaso2
-> WHERE sexo = 'mujer' AND nombre LIKE '%z';

- total de personas nacidas en los a os 70's se;
1. ¿Qué desea mostrar?
El número total de personas que nacieron en la década de los 70
2. Tablas involucradas:
Repaso2:
3. Condiciones:
La fecha de nacimiento debe estar entre 1970-01-01 y 1979-12-31.
4. Funciones a utilizar:
COUNT: Para contar el número de registros que cumplen con la condición.
BETWEEN: Para filtrar las fechas de nacimiento dentro del rango de los años 70.
5. Código:
SELECT COUNT(*) AS total_personas_70s
-> FROM Repaso2
-> WHERE fechanacimiento BETWEEN '1970-01-01' AND '1979-12-31';

- listar las personas con edad entre 25 y 30 a os
1. ¿Qué desea mostrar?
El nombre y la edad de las personas cuya edad esté entre 25 y 30 años.
2. Tablas involucradas:
Repaso2:
3. Condiciones:
La edad debe estar entre 25 y 30 años.
4. Funciones a utilizar:
YEAR(CURDATE()): Obtiene el año actual.
YEAR(fechanacimiento): Obtiene el año de nacimiento de la persona.
BETWEEN: Para filtrar las edades dentro del rango especificado.
5. Código:
SELECT nombre,
-> FLOOR(DATEDIFF(CURDATE(), fechanacimiento) / 365) AS edad
-> FROM Repaso2
-> WHERE FLOOR(DATEDIFF(CURDATE(), fechanacimiento) / 365) BETWEEN 25 AND 30;
NO HAY ESTUDIANTES ENTRE 25 A 30 AÑOS
------------------------------------//---------------------------------//-----------------------------
- cuantos hijos existen en el total de datos
1. ¿Qué desea mostrar?
El número total de hijos de todas las personas en la tabla Repaso2.
2. Tablas involucradas:
Repaso2: Esta tabla contiene la información de las personas, incluyendo el número de hijos (nrohijos).
3. Funciones a utilizar:
SUM: Para sumar los valores de la columna nrohijos.
4. Código:
SELECT SUM(nrohijos) AS total_hijos FROM Repaso2;

- agrupar por numero de hijos
1. ¿Qué desea mostrar?
El número de hijos (nrohijos) y la cantidad de personas que tienen esa cantidad de hijos.
2. Tablas involucradas:
Repaso2:
3. Funciones a utilizar:
COUNT: Para contar el número de personas en cada grupo.
GROUP BY: Para agrupar los registros por el número de hijos.
4. Código:
SELECT nrohijos, COUNT(*) AS cantidad_personas
-> FROM Repaso2
-> GROUP BY nrohijos
-> ORDER BY nrohijos;

- cuantas personas tiene el nombre carlos
1. ¿Qué desea mostrar?
El número de personas cuyo nombre es "carlos".
2. Tablas involucradas:
Repaso2:
3. Condiciones:
El nombre debe ser "carlos" (ignorando mayúsculas y minúsculas).
4. Funciones a utilizar:
COUNT: Para contar el número de registros que cumplen con la condición.
LIKE: Para filtrar nombres que coincidan con "carlos".
5. Código:
SELECT COUNT(*) AS total_personas_carlos
-> FROM Repaso2
-> WHERE LOWER(nombre) LIKE '%carlos%';

1. ¿Qué desea mostrar?
El número total de mujeres de edad entre cero o igual a 22 años.
2. Tablas involucradas:
Repaso2:
3. Condiciones:
Sexo: Debe ser "mujer".
Edad: Debe ser menor o igual a 22 años.
4. Funciones a utilizar:
COUNT: Para contar el número de registros que cumplen con las condiciones.
YEAR(CURDATE()): Obtiene el año actual.
YEAR(fechanacimiento): Obtiene el año de nacimiento de la persona.
BETWEEN: Para filtrar las edades dentro del rango especificado.
5. Código:
SELECT COUNT(*) AS total_mujeres_menores_22
-> FROM Repaso2
-> WHERE sexo = 'mujer'
-> AND YEAR(CURDATE()) - YEAR(fechanacimiento) <= 22;

- total de hombre mayores de 30 a os que tengan mas de 1 hijo
1. ¿Qué desea mostrar?
El número total de hombres mayores de 30 años que tienen más de 1 hijo.
2. Tablas involucradas:
Repaso2:
3. Condiciones:
Sexo: Debe ser "hombre".
Edad: Debe ser mayor a 30 años.
Número de hijos: Debe ser mayor a 1.
4. Funciones a utilizar:
COUNT: Para contar el número de registros que cumplen con las condiciones.
YEAR(CURDATE()): Obtiene el año actual.
YEAR(fechanacimiento): Obtiene el año de nacimiento de la persona.
5. Código:
SELECT COUNT(*) AS total_hombres_mayores_30_con_hijos
-> FROM Repaso2
-> WHERE sexo = 'hombre'
-> AND YEAR(CURDATE()) - YEAR(fechanacimiento) > 30
-> AND nrohijos > 1;

- cuantas mujeres mayores de 25 a os edad tiene entre 1 y 3 hijos
1. ¿Qué desea mostrar?
El número total de mujeres mayores de 25 años que tienen entre 1 y 3 hijos.
2. Tablas involucradas:
Repaso2:
3. Condiciones:
Sexo: Debe ser "mujer".
Edad: Debe ser mayor a 25 años.
Número de hijos: Debe estar entre 1 y 3 (inclusive).
4. Funciones a utilizar:
COUNT: Para contar el número de registros que cumplen con las condiciones.
YEAR(CURDATE()): Obtiene el año actual.
YEAR(fechanacimiento): Obtiene el año de nacimiento de la persona.
BETWEEN: Para filtrar el número de hijos dentro del rango especificado.
5. Código:
SELECT COUNT(*) AS total_mujeres_mayores_25_con_hijos
-> FROM Repaso2
-> WHERE sexo = 'mujer'
-> AND YEAR(CURDATE()) - YEAR(fechanacimiento) > 25
-> AND nrohijos BETWEEN 1 AND 3;

-mostrar la fecha del sistema.
1. ¿Qué desea lograr?
Obtener la fecha actual del sistema en formato YYYY-MM-DD.
2. Funciones involucradas:
CURRENT_DATE(): Devuelve la fecha actual del sistema.
3. Formato de salida:
La fecha se devuelve en formato YYYY-MM-DD (año-mes-día).
4.Condigo:
SELECT CURRENT_DATE() AS fecha_actual;

- Visualizar la hora actual del sistema
1. ¿Qué desea lograr?
Visualizar la hora actual del sistema en un formato específico: hora:minutos:segundos AM/PM.
2. Funciones involucradas:
NOW(): Devuelve la fecha y hora actual del sistema en formato YYYY-MM-DD HH:MM:SS.
DATE_FORMAT(): Permite formatear una fecha y hora según un patrón especificado.
3. Formato utilizado:
'%h:%i:%s %p':
%h: Hora en formato de 12 horas (01 a 12).
%i: Minutos (00 a 59).
%s: Segundos (00 a 59).
%p: Indicador AM/PM.
4. Código:
SELECT DATE_FORMAT(NOW(), '%h:%i:%s %p') AS hora_actual;

Inventar un ejercicio en el que utilice las 3 formas normales, procedimientos almacenados y Triggers.
Procedimiento para matricular a un estudiante en una materia:
DELIMITER //
CREATE PROCEDURE MatricularEstudiante(
IN p_carnet VARCHAR(10),
IN p_codigom VARCHAR(10)
)
BEGIN
-- Verificar si el estudiante ya está matriculado en la materia
IF EXISTS (SELECT 1 FROM estmat WHERE carnet = p_carnet AND codigom = p_codigom) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'El estudiante ya está matriculado en esta materia';
ELSE
-- Matricular al estudiante
INSERT INTO estmat (carnet, codigom, nota)
VALUES (p_carnet, p_codigom, NULL);
END IF;
END //
DELIMITER ;
---------------------------------//-------------------------------------------//-------------------------------
Procedimiento para calcular el promedio de notas de un estudiante:
DELIMITER //
CREATE PROCEDURE CalcularPromedioEstudiante(
IN p_carnet VARCHAR(10),
OUT p_promedio DECIMAL(5, 2)
)
BEGIN
-- Calcular el promedio de notas del estudiante
SELECT AVG(nota) INTO p_promedio
FROM estmat
WHERE carnet = p_carnet;
END //
DELIMITER ;
Trigger para auditar las matriculaciones:
CREATE TABLE AuditoriaMatriculas (
id_auditoria INT PRIMARY KEY AUTO_INCREMENT,
carnet VARCHAR(10),
codigom VARCHAR(10),
accion VARCHAR(50),
fecha_matricula DATETIME,
usuario VARCHAR(100)
);
DELIMITER //
CREATE TRIGGER tr_auditar_matriculas
AFTER INSERT ON estmat
FOR EACH ROW
BEGIN
INSERT INTO AuditoriaMatriculas (carnet, codigom, accion, fecha_matricula, usuario)
VALUES (NEW.carnet, NEW.codigom, 'MATRICULA', NOW(), CURRENT_USER());
END //
DELIMITER ;
Trigger para evitar que un estudiante se matricule en más de 5 materias:
DELIMITER //
CREATE TRIGGER tr_limitar_matriculas
BEFORE INSERT ON estmat
FOR EACH ROW
BEGIN
DECLARE v_total_matriculas INT;
-- Contar el número de materias en las que el estudiante está matriculado
SELECT COUNT(*) INTO v_total_matriculas
FROM estmat
WHERE carnet = NEW.carnet;
-- Si el estudiante ya está matriculado en 5 materias, lanzar un error
IF v_total_matriculas >= 5 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Un estudiante no puede matricularse en más de 5 materias';
END IF;
END //
DELIMITER ;
2. realizarle a través de disparadores la auditoría una de las tablas de la base de datos donde permita almacenar quienes y como administran la base de datos (Insertar, borrar o eliminar registros, Actualizar registros o información)
Este trigger se activará después de que se inserte un nuevo registro en la tabla estudiante.
DELIMITER //
CREATE TRIGGER tr_auditar_insert_estudiante
AFTER INSERT ON estudiante
FOR EACH ROW
BEGIN
INSERT INTO AuditoriaEstudiante (carnet, accion, fecha_hora, usuario, datos_nuevos)
VALUES (
NEW.carnet, -- Carnet del nuevo estudiante
'INSERT', -- Tipo de acción
NOW(), -- Fecha y hora actual
CURRENT_USER(), -- Usuario que realizó la acción
CONCAT('Nombre: ', NEW.nombre, -- Datos nuevos
', Fecha Nacimiento: ', NEW.fechanacimiento,
', Sexo: ', NEW.sexo)
);
END //
DELIMITER ;
______________
SELECT * FROM estudiante WHERE carnet = '003';

Este trigger se activará después de que se actualice un registro en la tabla estudiante.
DELIMITER //
CREATE TRIGGER tr_auditar_update_estudiante
AFTER UPDATE ON estudiante
FOR EACH ROW
BEGIN
INSERT INTO AuditoriaEstudiante (carnet, accion, fecha_hora, usuario, datos_anteriores, datos_nuevos)
VALUES (
NEW.carnet, -- Carnet del estudiante actualizado
'UPDATE', -- Tipo de acción
NOW(), -- Fecha y hora actual
CURRENT_USER(), -- Usuario que realizó la acción
CONCAT('Nombre: ', OLD.nombre, -- Datos anteriores
', Fecha Nacimiento: ', OLD.fechanacimiento,
', Sexo: ', OLD.sexo),
CONCAT('Nombre: ', NEW.nombre, -- Datos nuevos
', Fecha Nacimiento: ', NEW.fechanacimiento,
', Sexo: ', NEW.sexo)
);
END //
DELIMITER ;
Este trigger se activará después de que se elimine un registro en la tabla estudiante.
DELIMITER //
CREATE TRIGGER tr_auditar_delete_estudiante
AFTER DELETE ON estudiante
FOR EACH ROW
BEGIN
INSERT INTO AuditoriaEstudiante (carnet, accion, fecha_hora, usuario, datos_anteriores)
VALUES (
OLD.carnet, -- Carnet del estudiante eliminado
'DELETE', -- Tipo de acción
NOW(), -- Fecha y hora actual
CURRENT_USER(), -- Usuario que realizó la acción
CONCAT('Nombre: ', OLD.nombre, -- Datos anteriores
', Fecha Nacimiento: ', OLD.fechanacimiento,
', Sexo: ', OLD.sexo)
);
END //
DELIMITER ;