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 ;

 


algoritmos II / Actividades / Todos los derechos reservados
Creado con Webnode Cookies
¡Crea tu página web gratis! Esta página web fue creada con Webnode. Crea tu propia web gratis hoy mismo! Comenzar