Blog de Gonzalo

Blog de programación de Gonzalo López

UUID EN MYSQL

MYSQL

Un uuid en mysql, Universally Unique Identifier, o Identificador Único Universal, es un valor de 128 bits que se utiliza para generar identificadores únicos, típicamente representados como una cadena de 36 caracteres en formato hexadecimal, dividida por guiones, por ejemplo, 550e8400-e29b-41d4-a716-446655440000. En MySQL, se usa comúnmente para crear claves primarias o identificadores únicos que evitan colisiones, incluso en sistemas distribuidos.

Características de UUID en MySQL
  • Unicidad: Los UUID están diseñados para ser únicos globalmente, lo que los hace ideales para sistemas donde múltiples nodos o aplicaciones generan registros sin coordinación central.
  • Formato: Un UUID sigue el formato 8-4-4-4-12, por ejemplo, 123e4567-e89b-12d3-a456-426614174000, donde cada sección representa un grupo de caracteres hexadecimales.
  • Tipos de UUID: Existen varias versiones (como UUID v1, v4), pero la más común en aplicaciones modernas es la versión 4 (aleatoria).
MySQL proporciona una función nativa llamada UUID() para generar UUID de versión 1, que se basan en la dirección MAC del host y la marca de tiempo. Sin embargo, también se pueden generar UUIDs externamente (por ejemplo, con bibliotecas en PHP como ramsey/uuid) y almacenarlos en MySQL.
Los UUIDs se almacenan típicamente como:
  • VARCHAR(36): Para guardar el UUID como una cadena legible.
  • BINARY(16): Para almacenar el UUID en formato binario, ahorrando espacio, aunque requiere conversión para hacerlo legible.
Ventajas
  • Unicidad global: Ideal para sistemas distribuidos donde múltiples servidores generan registros.
  • Seguridad: Los UUID no revelan información secuencial, a diferencia de los IDs autoincrementales.
  • Flexibilidad: Funcionan bien en aplicaciones que integran múltiples bases de datos o servicios.
Desventajas
  • Tamaño: Los UUID ocupan más espacio que los enteros (INT o BIGINT).
  • Rendimiento: Las consultas pueden ser más lentas con UUIDs como claves primarias, especialmente en tablas grandes, debido a su tamaño y aleatoriedad.
  • Legibilidad: Los UUID no son tan fáciles de leer o recordar como IDs numéricos.
Ejemplo en MySQL
  • Usando la función UUID:

    
    SELECT UUID();
    //Ejemplo de salida: '6ccd780c-baba-1026-9564-5b8c656024db'
    
  • Crear una tabla con un campo UUID e insertar un campo con uuid:

    
    CREATE TABLE posts (
        id VARCHAR(36) PRIMARY KEY,
        title VARCHAR(255) NOT NULL,
        content TEXT NOT NULL,
        created_at DATETIME NOT NULL
    );
    INSERT INTO posts (id, title, content, created_at)
    VALUES (UUID(), 'Mi primer post', 'Contenido del post', NOW());
    
  • Almacenar UUID en formato binario: Si se quiere optimizar el espacio, puedes usar BINARY(16) y funciones como UUID_TO_BIN() y BIN_TO_UUID() (disponibles en MySQL 8.0+):

    
    CREATE TABLE posts (
        id BINARY(16) PRIMARY KEY,
        title VARCHAR(255) NOT NULL
    );
    
    INSERT INTO posts (id, title)
    VALUES (UUID_TO_BIN(UUID()), 'Post con UUID binario');
    
    SELECT BIN_TO_UUID(id) AS id, title FROM posts;
    

Compartir en twitter