Conceptos Avanzados de Bases de Datos

Encriptación MD5

-- Crear tabla para prueba de encriptación
CREATE TABLE `seguridad` (
  `codigo` INT(4) NOT NULL,
  `usuario` VARCHAR(20) NOT NULL,
  `contrasena` VARCHAR(50) NOT NULL,
  PRIMARY KEY(`codigo`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

-- Insertar datos sin encriptar
INSERT INTO seguridad VALUES
(1, 'carlos', 'abc123'),
(2, 'ana', 'abc123'),
(3, 'luis', 'abc123');

-- Encriptar registro individual
UPDATE seguridad SET contrasena = MD5(contrasena) WHERE codigo = 1;

-- Encriptar todos los registros
UPDATE seguridad SET contrasena = MD5(contrasena);

-- Insertar con encriptación directa
INSERT INTO seguridad VALUES(4, 'marta', MD5('abc123'));

-- Verificación de credenciales
SELECT * FROM seguridad 
WHERE usuario = 'marta' 
AND contrasena = MD5('abc123');

Transacciones

Operaciones que se eejcutan completamente o se revierten totalmente.

Propiedades ACID

  • Atomicidad: Ejecución total o nula de operaciones
  • Consistencia: Integridad de datos pre/post transacción
  • Aislamiento: Ejecución independiente de transacciones concurrentes
  • Durabilidad: Cambios persistentes tras confirmación

Problemas de aislamiento

  • Lectura sucia: Acceso a datos no confirmados
  • Lectura no repetible: Resultados inconsistentes en mismas consultas
  • Lectura fantasma: Detección de nuevos registros inesperados
  • Pérdida de actualizaciones: Sobrescritura de cambios no sincronizados

Manejo de transacciones

-- Desactivar autocommit
SET autocommit = 0;

-- Iniciar transacción
START TRANSACTION;

-- Operaciones SQL
UPDATE cuentas SET saldo = saldo - 100 WHERE id = 101;
UPDATE cuentas SET saldo = saldo + 100 WHERE id = 102;

-- Confirmar o cancelar
COMMIT; -- ROLLBACK para cancelar

-- Restaurar autocommit
SET autocommit = 1;

Índices

Estructuras que optimizan consultas mediante organización de datos.

Tipos principales

  • Clave primaria (PRIMARY KEY)
  • Índice único (UNIQUE)
  • Índice estándar (INDEX)
  • Índice de texto completo (FULLTEXT)

Implementación

-- Crear índice durante definición de tabla
CREATE TABLE clientes (
  id INT PRIMARY KEY,
  email VARCHAR(100) UNIQUE
);

-- Añadir índice existente
ALTER TABLE clientes ADD INDEX idx_nombre(nombre);

-- Crear índice explícito
CREATE INDEX idx_email ON clientes(email);

-- Análisis de rendimiento
EXPLAIN SELECT * FROM clientes WHERE nombre = 'Laura';

Principios de uso

  • Evitar exceso de índices
  • Priorizar columnas de consultas frecuentes
  • No indexar datos altamente volátiles
  • Omitir en tablas pequeñas

Gestión de Usuraios y Permisos

-- Crear usuario
CREATE USER empleado IDENTIFIED BY 'claveSegura';

-- Modificar contraseña
SET PASSWORD FOR empleado = PASSWORD('nuevaClave');

-- Renombrar usuario
RENAME USER empleado TO supervisor;

-- Otorgar privilegios
GRANT SELECT, INSERT ON bd_empresa.* TO supervisor;

-- Revocar permisos
REVOKE INSERT ON bd_empresa.* FROM supervisor;

-- Eliminar usuario
DROP USER supervisor;

Etiquetas: md5 transacciones Índices MySQL ACID

Publicado el 7-7 20:27