Parcial 1

Apreciado estudiante, a continuación, se propone una tarea para identificar fortalezas y oportunidades de mejora en el proceso de aprendizaje.

Dicha actividad tendrá el valor del 50% del primer parcial.

Descripción de la Actividad

1. Descargar el siguiente archivo y realizar el ejercicio propuesto 

Parte 2

Parte 3

Solucion 

Solucion Parte 2

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

3. 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).

4. 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;


  • //-------------------//-----------------------//--------------------//-------------------//---------------//----
  • Fechas
  • //----------------//---------------------------//----------------------//-------------------//----------------//-
  • 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.



  • Parte 3

  • //-------------------//-----------------------//--------------------//-------------------//---------------//----
  • Fechas
  • //----------------//---------------------------//----------------------//-------------------//----------------//-
  • 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
  • Solucion

    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;

    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.

    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;

    Tablas Repazo 2 

    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%';

    • 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 agregar un empleado: 

    DELIMITER //

    CREATE PROCEDURE AgregarEmpleado(

    IN p_nombre VARCHAR(100),

    IN p_salario DECIMAL(10,2),

    IN p_id_departamento INT

    )

    BEGIN

    -- Insertar el nuevo empleado en la tabla

    INSERT INTO Empleado (nombre, salario, id_departamento)

    VALUES (p_nombre, p_salario, p_id_departamento);

    END //

    DELIMITER ;


    Procedimiento para actualizar el salario de un empleado: 

    DELIMITER //

    CREATE PROCEDURE ActualizarSalario(

    IN p_id_empleado INT,

    IN p_nuevo_salario DECIMAL(10,2)

    )

    BEGIN

    DECLARE v_salario_actual DECIMAL(10,2);

    -- Obtener el salario actual del empleado

    SELECT salario INTO v_salario_actual

    FROM Empleado

    WHERE id_empleado = p_id_empleado;

    -- Registrar el cambio de salario en el historial

    INSERT INTO HistorialSalario (id_empleado, salario_anterior, salario_nuevo)

    VALUES (p_id_empleado, v_salario_actual, p_nuevo_salario);

    -- Actualizar el salario en la tabla de empleados

    UPDATE Empleado

    SET salario = p_nuevo_salario

    WHERE id_empleado = p_id_empleado;

    END //

    DELIMITER ;


    Trigger para auditar cambios de salario: 

    CREATE TABLE HistorialSalario (

    id_historial INT PRIMARY KEY AUTO_INCREMENT,

    id_empleado INT NOT NULL,

    salario_anterior DECIMAL(10,2),

    salario_nuevo DECIMAL(10,2),

    fecha_cambio DATETIME DEFAULT NOW(),

    FOREIGN KEY (id_empleado) REFERENCES Empleado(id_empleado)

    );

    DELIMITER //

    CREATE TRIGGER tr_auditar_salario

    BEFORE UPDATE ON Empleado

    FOR EACH ROW

    BEGIN

    INSERT INTO HistorialSalario (id_empleado, salario_anterior, salario_nuevo)

    VALUES (OLD.id_empleado, OLD.salario, NEW.salario);

    END //

    DELIMITER ;


    Trigger para evitar que un empleado tenga un salario menor al mínimo permitido: 

    DELIMITER //

    CREATE TRIGGER tr_verificar_salario

    BEFORE INSERT ON Empleado

    FOR EACH ROW

    BEGIN

    -- Validar que el salario no sea menor a 1000

    IF NEW.salario < 1000 THEN

    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'El salario no puede ser menor a 1000';

    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) 

    Creación de la tabla de auditoría: 

    DELIMITER //

    CREATE TRIGGER tr_auditar_insercion_empleado

    AFTER INSERT ON Empleado

    FOR EACH ROW

    BEGIN

    INSERT INTO AuditoriaEmpleado (id_empleado, accion, usuario)

    VALUES (NEW.id_empleado, 'INSERCIÓN', CURRENT_USER());

    END //

    DELIMITER ;


    Trigger para auditar actualizaciones en la tabla Empleado: 

    DELIMITER //

    CREATE TRIGGER tr_auditar_actualizacion_empleado

    AFTER UPDATE ON Empleado

    FOR EACH ROW

    BEGIN

    INSERT INTO AuditoriaEmpleado (id_empleado, accion, usuario)

    VALUES (NEW.id_empleado, 'ACTUALIZACIÓN', CURRENT_USER());

    END //

    DELIMITER ;


    Trigger para auditar eliminaciones en la tabla Empleado: 

    DELIMITER //

    CREATE TRIGGER tr_auditar_eliminacion_empleado

    AFTER DELETE ON Empleado

    FOR EACH ROW

    BEGIN

    INSERT INTO AuditoriaEmpleado (id_empleado, accion, usuario)

    VALUES (OLD.id_empleado, 'ELIMINACIÓN', CURRENT_USER());

    END //

    DELIMITER ;

    Base de Datos

    Explicacion base de datos Video


    ¡Crea tu página web gratis! Esta página web fue creada con Webnode. Crea tu propia web gratis hoy mismo! Comenzar