12.9. Otras funciones

MySQL 5.0

12.9. Otras funciones

12.9.1. Funciones bit

MySQL usa aritmética (64-bit) para operaciones de bit, así que estos operadores tienen un rango máximo de 64 bits.

  • OR bit a bit:

    mysql> SELECT 29 | 15;
            -> 31
    

    El resultado es un entero de 64 bits.

  • AND bit a bit:

    mysql> SELECT 29 & 15;
            -> 13
    

    El resultado es un entero de 64 bits.

  • XOR bit a bit:

    mysql> SELECT 1 ^ 1;
            -> 0
    mysql> SELECT 1 ^ 0;
            -> 1
    mysql> SELECT 11 ^ 3;
            -> 8
    

    El resultado es un entero de 64 bits.

    Desplaza un número largo () a la izquierda.

  • mysql> SELECT 1 << 2;
            -> 4
    

    El resultado es un entero de 64 bits.

  • Desplaza un número largo () a la derecha.

    mysql> SELECT 4 >> 2;
            -> 1
    

    El resultado es un entero de 64 bits.

  • Invierte todos los bits.

    mysql> SELECT 5 & ~1;
            -> 4
    

    El resultado es un entero de 64 bits.

  • )

    Retorna el número de bits en el argumento .

    mysql> SELECT BIT_COUNT(29);
            -> 4
    

12.9.2. Funciones de encriptación

Las funciones en esta sección encriptan y desencriptan valores. Si quiere almacenar resultados de una función de encriptación que puede contaner valores arbitrarios de bytes, use una columna en lugar de o para evitar problemas potenciales con eliminación de espacios finales que pueden cambiar los valores de datos.

  • ,) , ,)

    Estas funciones permiten encriptación y desencriptación de datos usando el algoritmo oficial AES (Advanced Encryption Standard), conocido anteriormente como "Rijndael." Se usa una encriptación con una clave de 128-bit , pero puede ampliarlo hasta 256 bits modificando las fuentes. Elegimos 128 porque es mucho más rápido y de momento es suficientemente seguro.

    Los argumentos de entrada pueden ser de cualquier longitud. Si algún argumento es , el resultado de esta función también es .

    Debido a que AES es un algoritmo a nivel de bloques, se usa relleno para cadenas de longitud impar y así la longitud de la cadena resultante puede calcularse como / 16) + 1).

    Si detecata datos inválidos o relleno incorrecto, retorna . Sin embargo, es posible para retornar un valor no (posiblemente basura) si los datos de entrada o la clave son inválidos.

    Puede usar la función AES para almacenar datos de forma encriptada modificando sus consultas:

    INSERT INTO t VALUES (1,AES_ENCRYPT('text','password'));
    

    Puede obtener incluso mejor seguridad si no transfiere la clave a través de la conexión para cada consulta, que puede hacerse almacenando la clave en una variable del servidor al hacer la conexión. Por ejemplo:

    SELECT @password:='my password';
    INSERT INTO t VALUES (1,AES_ENCRYPT('text',@password));
    

    y pueden considerarse las funciones de encriptación criptográficamente más seguras disponibles en MySQL.

  • ,)

    Desencripta la cadena encriptada usando como contraseña. debe ser una cadena retornada de .

  • ,)

    Encripta usando como contraseña. Para desencriptar el resultado, use .

    El resultado es una cadena binaria de la misma longitud que . Si quiere guardarlo en una columna, use una columna de tipo .

  • [,])

    Desencripta una cadena encriptada con . En caso de error, esta función retorna .

    Tenga en cuenta que esta función funciona sólo si MySQL se configura con soporte SSL. Consulte Sección 5.7.7, “Usar conexiones seguras”.

    Si no se da argumento , examina el primer byte de la cadena encriptada para determinar el número de clave DES que se usó para encriptar la cadena original, y luego lee la clave del fichero clave DES para desencriptar el mensaje. Para que esto funcione, el usuario debe tener el privilegio . El fichero clave puede especificarse con la opción del servidor .

    Si le pasa a esta función el argumento , esta cadena se usa como la clave para desencriptar el mensaje.

    Si el argumento no parece una cadena encriptada, MySQL retorna .

  • [,(|)])

    Encriptas la cadena con la clave dada usando el algoritmo triple-DES. En caso de error, retorna .

    Tenga en cuenta que esta función funciona sólo si MySQL se configura con soporte SSL. Consulte Sección 5.7.7, “Usar conexiones seguras”.

    La clave de encriptación a usar se elige basada en el segundo argumento de , si se ha dado uno:

    Argumento Descripción
    Sin argumento Se usa la primera clave del fichero clave DES.
    El número de clave dado (0-9) del fichero clave DES se usa.
    Se usa la cadena clave dada para encriptar .

    El fichero clave puede especificarse con la opción de servidor .

    La cadena retornada es una cadena binaria donde el primer carácter es .

    Se añade 128 para hacer más sencillo reconocer una clave encriptada. Si usa una cadena clave, es 127.

    La longitud de la cadena para el resultado es = + (8-( % 8))+1.

    Cada línea en el fichero clave DES tiene el siguiente formato:

     
    

    Cada debe ser un número en el rango de a . Las líneas en el fichero pueden estar en cualquier orden. es la cadena que se usa para encriptar el mensaje. Entre el número y la clave debe haber un espacio como mínimo. La primera clave es la clave usada por defecto si no especifica ningún argumento clave para

    Puede decir a MySQL que lea un nuevo valor de clave del fichero clave con el comando . Esto necesita el privilegio .

    Un beneficio de tener un conjunto de claves por defecto es que da a las aplicaciones una forma de chequear la existencia de valores de columna encriptados, sin dar al usuario final el derecho de desencritparlos.

    mysql> SELECT customer_address FROM customer_table 
         > WHERE crypted_credit_card = DES_ENCRYPT('credit_card_number');
    

  • [,])

    Encripta usando la llamada de sistema Unix . El argumento debe ser una cadena con al menos dos carácteres. Si no se da argumento , se usa un valor aleatorio.

    mysql> SELECT ENCRYPT('hello');
            -> 'VxuFAJXVARROc'
    

    ignora todo excepto los primeros ochos carácteres de , al menos en algunos sistemas. Este comportamiento viene determinado por la implementación de la llamada de sistema subyacente.

    Si no está disponible en su sistema (como pasa en Windows), siempre retorna . Debido a esto, recomandamos que use o en su lugar, y que estas dos funciones existen en todas las plataformas.

  • )

    Calcula una checksum MD5 de 128-bit para la cadena. El valor se retorna como una cadena binaria de dígitos 32 hex ,o si el argumento era . El valor de retorno puede usarse como clave hash, por ejemplo.

    mysql> SELECT MD5('testing');
            -> 'ae2b1fca515949e5d54fb22b8ed95575'
    

    Este es el "RSA Data Security, Inc. MD5 Message-Digest Algorithm."

    Si quiere convertir el valor a mayúsculas, consulte la descripción de conversiones de cadenas binarias dada en la entrada del operador en Sección 12.8, “Funciones y operadores de cast”.

  • )

    se añadió en MySQL 4.1,cuando se cambión la implementación de para mejorar la seguridad. retorna el valor de la implementación pre-4.1 de , y está hecha para permitirle resetear contraseñas para cualquier cliente pre-4.1 que necesite conectar a su versión 4.1 o posterior de MySQL server sin bloquearlo. Consulte Sección 5.6.9, “Hashing de contraseñas en MySQL 4.1”.

  • )

    Calcula y retorna una cadena de contraseña de la contraseña en texto plano , o si el argumento era . Esta es la función que se usa para encriptar contraseñas MySQL para almacenar en la columna de la tabla .

    mysql> SELECT PASSWORD('badpwd');
            -> '7f84554057dd964b'
    

    La encriptación de es de un sentido (no reversible).

    no realiza encriptación de contraseña de la misma forma que se encriptan las contraseñas Unix. Consulte .

    Nota: La función se usa por el sistema de autenticación en MySQL Server; no no debe usarlo en su propias aplicaciones. Para ese propósito, use o en su lugar. Consulte RFC 2195 para más información acerca de tratar contraseñas y autenticación de forma segura en su aplicación.

  • ), )

    Calcula una checksum SHA1 de 160-bit para la cadena, como se describe en RFC 3174 (Secure Hash Algorithm). El valor se retorna como cadnea de 40 dítigos hexadecimales, o si el argumento era . Uno de los usos posibles para esta función es una clave hash. También puede usarlo como función criptográficamente segura para almacenar contraseñas

    mysql> SELECT SHA1('abc');
            -> 'a9993e364706816aba3e25717850c26c9cd0d89d'
    

    puede considerarse un equivalente criptográficamente más seguro que . es sinónimo de .

12.9.3. Funciones de información

  • ,)

    La función ejecuta la expresión repetidamente veces. Puede usarse para ver lo rápido que MySQL procesa la expresión. El valor resultado siempre es . El uso pretendido es desde dentro del cliente mysql, que reporte tiempos de ejecución de consultas:

    mysql> SELECT BENCHMARK(1000000,ENCODE('hello','goodbye'));
    +----------------------------------------------+
    | BENCHMARK(1000000,ENCODE('hello','goodbye')) |
    +----------------------------------------------+
    |                                            0 |
    +----------------------------------------------+
    1 row in set (4.74 sec)
    

    El tiempo reportado es el tiempo transcurrido en el cliente final no el tiempo de CPU en el servidor. Se recomienda ejecutar varias veces, y interpretar el resultado teniendo en cuenta la carga de la máquina servidor.

  • )

    Retorna el conjunto de carácteres el argumento cadena.

    mysql> SELECT CHARSET('abc');
            -> 'latin1'
    mysql> SELECT CHARSET(CONVERT('abc' USING utf8));
            -> 'utf8'
    mysql> SELECT CHARSET(USER());
            -> 'utf8'
    

  • )

    Retorna la coerzabilidad de la colación del argumento.

    mysql> SELECT COERCIBILITY('abc' COLLATE latin1_swedish_ci);
            -> 0
    mysql> SELECT COERCIBILITY(USER());
            -> 3
    mysql> SELECT COERCIBILITY('abc');
            -> 4
    

    El valor de retorno tiene los siguientes significados:

    Coerzabilidad Significado Ejemplo
    Colación explícita Valor con la cláusula
    Sin colación Concatenación de cadenas con distintas colaciones
    Colación implícita Valor de columna
    Constante de sistema Valor de retorno
    Coercible Cadena literal
    Ignorable o una expresión derivada de

    Antes de MySQL 5.0.3, los valores de retorno se muestran como sigue, y las funciones tales como tienen una coerzabilidad de 2:

    Coerzabilidad Significado Ejemplo
    Colación explícita Valor con la cláusula
    Sin colación Concatenación de cadenas con distintas colaciones
    Colación implícita Valor de columna
    Coercible Cadena literal

    Los valores menores tienen precedencia mayor.

  • )

    Retorna la colación para el conjunto de carácteres de la cadena dada.

    mysql> SELECT COLLATION('abc');
            -> 'latin1_swedish_ci'
    mysql> SELECT COLLATION(_utf8'abc');
            -> 'utf8_general_ci'
    

  • Retorna el ID de la conexión (ID del thread) para la conexión. Cada conexión tiene su propio y único ID.

    mysql> SELECT CONNECTION_ID();
            -> 23786
    

  • Retorna la combinación de nombre de usuario y de equipo que tiene la sesión actual. Este valor se corresponde con la cuenta MySQL que determina sus privilegios de aceso. Puede ser distinto al valor de .

    mysql> SELECT USER();
            -> 'davida@localhost'
    mysql> SELECT * FROM mysql.user;
    ERROR 1044: Access denied for user ''@'localhost' to
    database 'mysql'
    mysql> SELECT CURRENT_USER();
            -> '@localhost'
    

    El ejemplo ilustra que aunque el cliente especica un nombre de usuario de (como se indica por el valor de la función ), el sevidor autentica al cliente usando una cuenta de usuario anónimo (como se ve por la parte de usuario vacía del valor ). Una forma en que esto puede ocurrir es que no haya cuenta listada en las cuentas de permisos para .

    En MySQL 5.0, la cadena retornada por usa el conjunto de carácteres .

  • Retorna el nombre de base de datos por defecto (actual). En MySQL 5.0, la cadena tiene el conjunto de carácteres .

    mysql> SELECT DATABASE();
            -> 'test'
    

    No hay base de datos por defecto, retorna .

  • Un comando puede incluir una cláusula para restringir el número de registros que el servidor retorna al cliente. En algunos casos, es deseable saber cuántos registos habría retornado el comando sin , pero sin volver a lanzar el comando. Para obtener este conteo de registros, incluya la opción en el comando , luego invoque :

    mysql> SELECT SQL_CALC_FOUND_ROWS * FROM 
        -> WHERE id > 100 LIMIT 10;
    mysql> SELECT FOUND_ROWS();
    

    El segundo retorna un número indicando cuantos registros habría retornado el primer sin la cláusula . (Si el comando precendente no incluye la opción , puede retornar un resultado distinto cuando se usa y cuando no.)

    Tenga en cuenta que si usa , MySQL debe calcular cuántos registros hay en el conjunto de resultdos completo. Sin embargo, esto es más rápido que ejecutar la consulta de nuevo sin , ya que el conjunto de resultados no necesita ser enviado al cliente.

    y pueden ser útiles en situaciones donde puede querer restringir el número de registros que retorna una consulta, pero también determinar el número de registros en el conjunto de resultados entero sin ejecutar la consulta de nuevo. Un ejemplo es el script Web que presenta una salida paginada conteniendo enlaces a las páginas que muestran otras secciones de un resultado de búsqueda. Usando puede determinar cuántas páginas necesita para el resto de resultados.

    El uso de y es más complejo para consultas que para comandos simples, ya que puede ocurrir en varios lugares en una . Puede aplicarse a comandos individuales en la , o global en el resultado de como conjunto.

    La intención de para es que debe retornar el número de registros que se retornarían sin un globar. Las condiciones para uso de con son:

    • La palabra clave debe aparecer en el primer de la .

    • El valor de es exacto sólo si se usa . Si se usa sin , se eliminan duplicados y el valor de es sólo aproximado.

    • Si no hay en , se ignora y retorna el número de registros en la tabla temporal que se crea para procesar .

  • , )

    Retorna el último valor generado automáticamente que se insertó en una columna .

    mysql> SELECT LAST_INSERT_ID();
            -> 195
    

    El último ID generado se mantiene en el servidor para cada conexión. Esto significa que el valor de la función retorna a cada cliente el valor más reciente generado por ese cliente. Este valor no puede ser afectado por otros clientes, incluso si generan valores ellos mismos. Este comportamiento asegura que reciba sus propios IDs sin tener en cuenta la actividad de otros clientes y sin la necesidad de bloqueos o transacciones.

    El valor de no cambia si actualiza la columna de un registro con un valor no mágico (esto es, un valor que no es ni ).

    Si inserta varios registros a la vez con un comando de inserción retorna el valor del primer registro insertado. La razón para esto es hacer posible reproducir fácilmente el mismo comando contra otro servidor.

    Si usa y el registro se ignora, el contador no se incrementa y retorna 0, lo que refleja que no se ha insertado ningún registro. (Antes de MySQL 4.1, el contador se incrementa y retorna el nuevo valor.)

    Si se da como argumento para , el valor del argumento se retorna por la función y se recuerda como el siguiente valor a ser retornado por . Esto puede usarse para simular secuencias:

    • Cree una tabla para guardar el contador de secuencia y inicializarlo:

      mysql> CREATE TABLE sequence (id INT NOT NULL);
      mysql> INSERT INTO sequence VALUES (0);
      
    • Use la tabla para generar números de secuncia como aquí:

      mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1);
      mysql> SELECT LAST_INSERT_ID();
      

      El comando incrementa el contador de secuencia y causa que la siguiente llamada a retorne el valor actualizado. El comando recibe ese valor. La función de la API C puede usarse para obtener el valor . Consulte Sección 24.3.3.34, “.

    Puede generar secuencias sin llamar a , pero la utilidad de usar esta función de esta forma es que el valor ID se mantiene en el servidor como el último valor generado automáticamente. Es válido para multi usuarios porque varios clientes pueden realizar el comando y obtener su propio valor de secuencia con el comando (o ), sin afectar o ser afectado por otros clientes que generen sus propios valores de secuencia.

    Tenga en cuenta que sólo se actualiza tras los comandos y , así que no puede usar la función de la API C para recibir el valor de ) tras ejecutar otros comandos SQL como o .

  • retorna el número de registros actualizados, insertados o borrados por el comando precedente. Esto es lo mismo que el número de registros que muestra el cliente mysql y el valor de la función de la API C .

    mysql> INSERT INTO t VALUES(1),(2),(3);
    Query OK, 3 rows affected (0.00 sec)
    Records: 3  Duplicates: 0  Warnings: 0
    
    mysql> SELECT ROW_COUNT();
    +-------------+
    | ROW_COUNT() |
    +-------------+
    |           3 |
    +-------------+
    1 row in set (0.00 sec)
    
    mysql> DELETE FROM t WHERE i IN(1,2);
    Query OK, 2 rows affected (0.00 sec)
    
    mysql> SELECT ROW_COUNT();
    +-------------+
    | ROW_COUNT() |
    +-------------+
    |           2 |
    +-------------+
    1 row in set (0.00 sec)
    

    se añadió en MySQL 5.0.1.

  • es sinónimo de .

  • es sinónimo de .

  • Retorna el nombre de usuario y de equipo de MySQL actual.

    mysql> SELECT USER();
            -> 'davida@localhost'
    

    El valor indica el nombre de usuario especificado al conectar con el servidor, y el equipo cliente desde el que se está conectando. El valor puede ser distinto del de .

    Puede extraer la parte de nombre de usuario así:

    mysql> SELECT SUBSTRING_INDEX(USER(),'@',1);
            -> 'davida'
    

    En MySQL 5.0, retorna un valor en el conjunto de carácteres , así que debe asegurarse que la literal se interpreta en el conjunto de carácteres:

    mysql> SELECT SUBSTRING_INDEX(USER(),_utf8'@',1);
            -> 'davida'
    

  • Retorna una cadena que indica la versión del servidor MySQL. La cadena usa el conjunto de carácteres .

    mysql> SELECT VERSION();
            -> '5.0.9-standard'
    

    Tenga en cuenta que si su cadena de versión acaba con significa que el logueo está activado.

12.9.4. Funciones varias

  • )

    Retorna el valor por defecto para una columna de tabla. A partir de MySQL 5.0.2, retorna un error si la columna no tiene valor por defecto.

    mysql> UPDATE t SET i = DEFAULT(i)+1 WHERE id < 100;
    

  • ,)

    Formatea el número a un formato como , redondeado a decimales, y retorna el resultado como una cadena. Si es , el resultado no tiene punto decimar o parte fraccional.

    mysql> SELECT FORMAT(12332.123456, 4);
            -> '12,332.1235'
    mysql> SELECT FORMAT(12332.1,4);
            -> '12,332.1000'
    mysql> SELECT FORMAT(12332.2,0);
            -> '12,332'
    

  • ,)

    Intenta obtener un bloqueo con un nombre dado por la cadena , con un tiempo máximo de segundos. Retorna si el bloqueo se obtiene con éxito, si el intento supera el tiempo máximo (por ejemplo, debido a que otro cliente haya bloqueado el nombre préviamente), o si ocurre un error (tal como quedarse sin memoria o que el flujo acabe con mysqladmin kill). Si tiene un bloqueo obtenido con , se libera cuando ejecuta , ejecuta un nuevo , o su conexión termina (normal o anormalmente).

    Esta función puede usarse para implementar bloqueos de aplicaciones o simular bloqueo de registros. Los nombres se bloquean en el servidor. Si un nombre lo ha bloqueado un cliente, bloquea cualquier petición de otro cliente para bloquear el mismo nombre. Esto permite a los clientes que se pongan con un nombre de bloqueo dado a usar el nombre para realizar advertencias de bloqueo cooperativo. Pero tenga en cuenta que esto permite a un cliente que no esté entre el conjunto de clientes cooperativos bloquear un nombre, de forma deliverada o no, y evitar que ninguno de los clientes cooperativos puedan bloquear dicho nombre. Una forma de reducir la probabilidad que esto pase es usar nombres de bloqueo especificos de bases de datos o de aplicación. Por ejemplo, use nombres de bloqueo de la forma o .

    mysql> SELECT GET_LOCK('lock1',10);
            -> 1
    mysql> SELECT IS_FREE_LOCK('lock2');
            -> 1
    mysql> SELECT GET_LOCK('lock2',10);
            -> 1
    mysql> SELECT RELEASE_LOCK('lock2');
            -> 1
    mysql> SELECT RELEASE_LOCK('lock1');
            -> NULL
    

    Tenga en cuenta que la segunda llamada a retorna debido a que el bloqueo se libera automáticamente por la segunda llamada .

  • )

    Dada la representación de cuatros números separados por puntos de una dirección de red como cadena de carácteres, retorna un entero que representa el valor numérico de la dirección. Las direcciones pueden ser direcciones de 4 o 8 bytes .

    mysql> SELECT INET_ATON('209.207.224.40');
            -> 3520061480
    

    El número generado siempre tiene orden de bytes de red. Para el ejemplo mostrado anteriormente, el número se calcula como .

    también entiende direcciones IP de forma corta:

    mysql> SELECT INET_ATON('127.0.0.1'), INET_ATON('127.1');
            -> 2130706433, 2130706433
    

    NOTA: Cuando almacene valores generados por , se recomiendoa que use una columna . Si usa una columna (con signo), los valores correspondientes a direcciones IP para las que el primer octeto es mayor que 127 se truncan a 2147483647 (esto es, el valor retornado por ). Consulte Sección 11.2, “Tipos numéricos”.

  • )

    Dada una dirección de red numérica (4 o 8 bytes), retorna la representación de puntos de la dirección como cadena.

    mysql> SELECT INET_NTOA(3520061480);
            -> '209.207.224.40'
    

  • )

    Chequea si el nombre de bloqueo está libre para uso (esto es, no bloqueado). Retorna si el bloqueo está libre (nadie lo usa para bloquear), si el bloqueo está en uso, y en errores (tales como argumentos incorrectos).

  • )

    Chequea si el nombre de bloqueo está en uso (esto es, bloqueado). Si es así, retorna el identificador de conexión del cliente que tiene el bloqueo. De otro modo, retorna .

  • ,[,])

    Esta función es útil para control de sincronización de maestro/ esclavo. Bloquea hasta que el esclavo ha leído y aplicado todas las actualizaciones hasta la posición especificada en el log del maestro. El valor retornado es el número de eventos logueados que tiene que esperar para llegar a la posición especificada. La función retorna si el flujo esclavo SQL no está arrancado, la información maestra del esclavo no está inicializada, los argumentos son incorrectos, u ocurre un error. Retorna si se agota el tiempo de espera. Si el flujo SQL esclavo para mientras está esperando, la función retorna . Si el eslavo pasa la posición especificada, la función retorna inmediatamente.

    Si un valor se especifica, para de esprar cuando pasan segundos. debe ser superior a 0; un cero o negativo significa que no hay timeout.

  • )

    Libera el bloqueo nombrado por la cadena obtenida con . Retorna si el bloqueo se libera, si el bloqueo no estaba bloqueado por este flujo (en cuyo caso el bloqueo no se libera), y si el bloqueo nombrado no existía. El bloqeuo no existe si nunca se obtuvo por una llamada a o si había sido liberado préviamente.

    El comando es conveniente para usar con . Consulte Sección 13.2.2, “Sintaxis de .

  • Retorna un Universal Unique Identifier (UUID) (Identificador Único Universal) generado según la “DCE 1.1: Remote Procedure Call” (Apéndice A) CAE (Common Applications Environment) Especificaciones publicadas por The Open Group en Octubre 1997 (Número de Documento C706).

    Se designa un UUID como número que es único globalmente en espacio y tiempo. Dos llamadas a generan dos valores distintos, incluso si estas llamadas se realizan en dos máquinas separadas y no están conectadas entre ellas.

    Un UUID es un número de 128 bits representado por una cadena de cinco números hexadecimales en formato :

    • Los primeros tres números se generan de un valor temporal.

    • El cuarto número preserva unicidad temporal en caso de que el valor temporal pierda moniticidad (por ejemplo, debido al cambio horario).

    • El quinto número es un número IEEE 802 de nodo que proporciona unicidad espacial. Un número aleatorio se sustituye si el último no está disponible (por ejemplo, debido a que la máquina no tenga tarjeta Ethernet, o no sabemos encontrar la dirección hardware de una interfaz en el sistema operativo). En este caso, la unicidad espacial no se puede garantizar. Sin embargo, una colisión debe tener una probabilidad muy baja.

      Actualmente, la dirección MAC de una interfaz se tiene en cuenta sólo en FreeBSD y Linux. En otros sistemas operativos, MySQL usa un número generado aleatoriamente de 48 bits.

    mysql> SELECT UUID();
            -> '6ccd780c-baba-1026-9564-0040f4311e29'
    

    Tenga en cuenta que no funciona todavía con replicación.