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;