Talleres Avanzados de MySQL
Taller 1: Procedimientos Almacenados en MySQL
Objetivo:
Comprender y aplicar procedimientos almacenados en MySQL para
automatizar tareas y mejorar la eficiencia en la gestión de bases de datos.
Actividades:
1. Crear un procedimiento almacenado simple que inserte un nuevo
empleado en la tabla empleados.
2. Crear un procedimiento almacenado con parámetros para
actualizar el salario de un empleado.
3. Crear un procedimiento almacenado que devuelva resultados con
SELECT.
4. Ejecutar los procedimientos y verificar su funcionamiento.
Ejemplos:
Ejemplo 1: Insertar un empleado
DELIMITER //
CREATE PROCEDURE insertar_empleado(IN nombre VARCHAR(50), IN apellido
VARCHAR(50), IN salario DECIMAL(10,2))
BEGIN
INSERT INTO empleados (nombre, apellido, salario) VALUES (nombre,
apellido, salario);
END //
DELIMITER ;
Ejemplo 2: Actualizar salario
DELIMITER //
CREATE PROCEDURE actualizar_salario(IN empleado_id INT, IN nuevo_salario
DECIMAL(10,2))
BEGIN
UPDATE empleados SET salario = nuevo_salario WHERE id = empleado_id;
END //
DELIMITER ;
Ejemplo 3: Obtener empleados con salario mayor a X
DELIMITER //
CREATE PROCEDURE empleados_por_salario(IN min_salario DECIMAL(10,2))
BEGIN
SELECT * FROM empleados WHERE salario > min_salario;
END //
DELIMITER ;
Cómo ejecutar los procedimientos almacenados:
Recuerde guardar imagen de como estaba la bases de datos para observar los
cambios.
CALL insertar_empleado('Carlos', 'Gómez', 3500.00);
Encuentre el error y corríjalo. No existe error :D
CALL actualizar_salario(1, 4200.00);
CALL empleados_por_salario(4000);
Taller 2: Vistas en MySQL
Objetivo:
Aprender a crear y gestionar vistas en MySQL para optimizar consultas y
reportes.
Ejemplos:
Ejemplo 1: Vista de empleados con sus departamentos
CREATE VIEW vista_empleados_departamentos AS
SELECT e.nombre, e.apellido, d.nombre AS departamento
FROM empleados e
JOIN departamentos d ON e.departamento_id = d.id;
Encuentre el error y corríjalo. No existe error, ejecuta con
normalidad :D
Ejemplo 2: Vista de empleados con salario mayor a 4000
CREATE VIEW vista_empleados_salario AS SELECT nombre, apellido, salario
FROM empleados WHERE salario > 4000;
Encuentre le error y corríjalo. No existe error, ejecuta con normalidad
:D
Ejemplo 3: Vista de proyectos con sus departamentos
CREATE VIEW vista_proyectos_departamentos AS
SELECT p.nombre AS proyecto, d.nombre AS departamento
FROM proyectos p
JOIN departamentos d ON p.departamento_id = d.id;
Solucione el problema, sino encuentra la tabla agréguela.
Cómo ejecutar las vistas:
SELECT * FROM vista_empleados_departamentos;
SELECT * FROM vista_empleados_salario;
SELECT * FROM vista_proyectos_departamentos;
Taller 3: Auditoría en MySQL
Objetivo:
Implementar auditoría en MySQL mediante triggers y registros de cambios en
una tabla de auditoría.
Ejemplos:
Ejemplo 1: Tabla de auditoría de salarios
CREATE TABLE auditoria_salarios (
id INT AUTO_INCREMENT PRIMARY KEY,
empleado_id INT,
salario_anterior DECIMAL(10,2),
salario_nuevo DECIMAL(10,2),
fecha_cambio TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Ejemplo 2: Trigger para auditoría de cambios de salario
DELIMITER //
CREATE TRIGGER auditar_salarios BEFORE UPDATE ON empleados
FOR EACH ROW
BEGIN
INSERT INTO auditoria_salarios (empleado_id, salario_anterior,
salario_nuevo)
VALUES (OLD.id, OLD.salario, NEW.salario);
END //
DELIMITER ;
Ejemplo 3: Registro de eliminaciones en una tabla de auditoría
CREATE TABLE auditoria_eliminaciones (
id INT AUTO_INCREMENT PRIMARY KEY,
empleado_id INT,
fecha_eliminacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
DELIMITER //
CREATE TRIGGER auditar_eliminaciones BEFORE DELETE ON empleados
FOR EACH ROW
BEGIN
INSERT INTO auditoria_eliminaciones (empleado_id) VALUES (OLD.id);
END //
DELIMITER ;
Cómo ejecutar la auditoría:
UPDATE empleados SET salario = 5000 WHERE id = 2;
SELECT * FROM auditoria_salarios;
DELETE FROM empleados WHERE id = 3;
SELECT * FROM auditoria_eliminaciones;
Taller 4: Funciones en MySQL
Ejemplos:
Ejemplo 1: Calcular antigüedad
DELIMITER //
CREATE FUNCTION calcular_antiguedad(fecha_ingreso DATE) RETURNS INT
DETERMINISTIC
BEGIN
RETURN TIMESTAMPDIFF(YEAR, fecha_ingreso, CURDATE());
END //
DELIMITER ;
Ejemplo 2: Determinar si un salario está por encima del promedio
DELIMITER //
CREATE FUNCTION salario_sobre_promedio(salario DECIMAL(10,2)) RETURNS
BOOLEAN
DETERMINISTIC
BEGIN
DECLARE promedio DECIMAL(10,2);
SELECT AVG(salario) INTO promedio FROM empleados;
RETURN salario > promedio;
END //
DELIMITER ;
Cómo ejecutar las funciones:
SELECT calcular_antiguedad('2015-06-01') AS años_trabajados;
SELECT nombre, salario, salario_sobre_promedio(salario) AS sobre_promedio
FROM empleados;
Taller 5: Transacciones en MySQL
Ejemplos:
Ejemplo 1: Incremento de salario con COMMIT
START TRANSACTION;
UPDATE empleados SET salario = salario + 500 WHERE departamento_id = 1;
COMMIT;
Ejemplo 2: Rollback si hay un error
START TRANSACTION;
UPDATE empleados SET salario = salario + 1000 WHERE departamento_id = 1;
ROLLBACK;
Cómo ejecutar las transacciones:
SELECT * FROM empleados;
Desafío para el Estudiante
Tarea:
El estudiante deberá agregar una nueva tabla relacionada a la base de datos
existente y desarrollar lo siguiente:
1. Dos Procedimientos Almacenados que manipulen datos en la nueva
tabla.
2. Dos Vistas que integren información de la nueva tabla con las
existentes.
3. Dos Triggers para auditoría de cambios en la nueva tabla.
4. Dos Transacciones que involucren la nueva tabla para mantener la
integridad de los datos.
📌 Entrega esperada: Código SQL con la implementación y evidencias de
ejecución.