En este artículo, exploraremos cómo manejar la importación y exportación de datos en MySQL, junto con operaciones comunes de gestión de registros. Utilizaremos ejemplos de código modificados para ilustrar los conceptos.
- Importación de Datos
Para importar datos desde un archivo en el servidor, primero debemos configurar el directorio permitido. La variable de sistema secure_file_priv restringe las operaciones de archivo a un directorio específico, lo cual es crucial para la seguridad.
-- Verificar la configuración del directorio seguro
SHOW VARIABLES LIKE "secure_file_priv";
-- Resultado esperado:
-- +------------------+-------------------+
-- | Variable_name | Value |
-- +------------------+-------------------+
-- | secure_file_priv | /var/mysql/data/ |
-- +------------------+-------------------+
Supongamos que queremos importar datos de un archivo CSV en una tabla llamada empleados. Primero, creamos la tabla con una estructura diferente:
CREATE TABLE ejemplo.empleados (
id INT PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(50),
salario DECIMAL(10,2),
departamento VARCHAR(30),
fecha_ingreso DATE
);
A continuación, cargamos datos desde un archivo con delimitadores personalizados:
-- Preparar el archivo (por ejemplo, empleados.csv en el directorio seguro)
LOAD DATA INFILE "/var/mysql/data/empleados.csv"
INTO TABLE ejemplo.empleados
FIELDS TERMINATED BY ";"
LINES TERMINATED BY "\n"
IGNORE 1 LINES; -- Ignorar encabezado si existe
- Exportación de Datos
La exportación permite guardar resultados de consultas en archivos. Usamos la cláusula INTO OUTFILE con delimitadores configurables.
-- Exportar datos de empleados con salario mayor a 30000
SELECT nombre, salario, departamento
INTO OUTFILE "/var/mysql/data/export_salarios.txt"
FIELDS TERMINATED BY "|"
LINES TERMINATED BY "\n"
FROM ejemplo.empleados
WHERE salario > 30000;
También podemos exportar resultados con formatos más complejos:
-- Exportar con delimitadores múltiples
SELECT nombre, departamento
INTO OUTFILE "/var/mysql/data/departamentos.txt"
FIELDS TERMINATED BY "::"
LINES TERMINATED BY "||"
FROM ejemplo.empleados
WHERE departamento IN ('Ventas', 'TI');
- Gestión de Registros
Veamos ejemplos de manipulación de datos, incluyendo inserción, consulta, actualización y eliminación.
3.1 Inserción de Datos
Podemos insertar múltiples registros con un solo comando:
INSERT INTO ejemplo.empleados (nombre, salario, departamento, fecha_ingreso)
VALUES
('Ana García', 45000.50, 'Ventas', '2023-01-15'),
('Carlos López', 38000.00, 'TI', '2022-11-20'),
('María Pérez', 42000.75, 'Marketing', '2023-03-10');
3.2 Consultas con Condiciones
Utilizamos operadores y funciones para filtrar datos:
-- Consulta con operadores lógicos
SELECT nombre, salario
FROM ejemplo.empleados
WHERE salario >= 40000 AND departamento != 'TI';
-- Uso de IN para múltiples valores
SELECT nombre, departamento
FROM ejemplo.empleados
WHERE departamento IN ('Ventas', 'Marketing', 'Finanzas');
-- Consulta con LIKE y comodines
SELECT nombre
FROM ejemplo.empleados
WHERE nombre LIKE 'A%'; -- Nombres que empiezan con 'A'
3.3 Expresiones Regulares
La cláusula REGEXP permite patrones complejos:
-- Buscar nombres con caracteres específicos
SELECT nombre
FROM ejemplo.empleados
WHERE nombre REGEXP '^[A-C]'; -- Nombres que empiezan con A, B o C
-- Buscar departamentos con patrones
SELECT nombre, departamento
FROM ejemplo.empleados
WHERE departamento REGEXP 'TI|Ventas'; -- Departamentos 'TI' o 'Ventas'
3.4 Funciones Agregadas y Agrupación
Calculamos estadísticas y agrupamos resultados:
-- Calcular promedio de salarios por departamento
SELECT departamento, AVG(salario) AS promedio_salario
FROM ejemplo.empleados
GROUP BY departamento;
-- Contar empleados y encontrar salario máximo
SELECT COUNT(*) AS total_empleados, MAX(salario) AS salario_maximo
FROM ejemplo.empleados;
3.5 Actualización y Eliminación
Modificamos o borramos reigstros según condiciones:
-- Actualizar salarios con cálculos
UPDATE ejemplo.empleados
SET salario = salario * 1.10 -- Aumentar 10%
WHERE departamento = 'Ventas';
-- Eliminar registros con condiciones
DELETE FROM ejemplo.empleados
WHERE fecha_ingreso < '2022-01-01';
3.6 Ordneamiento y Limitación
Organizamos los resultados y controlamos el número de filas:
-- Ordenar por salario descendente y limitar resultados
SELECT nombre, salario
FROM ejemplo.empleados
ORDER BY salario DESC
LIMIT 5;