MySQL usa aritmética BIGINT
(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.
-
<<
mysql> SELECT 1 << 2; -> 4
El resultado es un entero de 64 bits.
-
>>
Desplaza un número largo (
BIGINT
) 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.
-
BIT_COUNT(
N
)Retorna el número de bits en el argumento
N
.mysql> SELECT BIT_COUNT(29); -> 4
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
BLOB
en lugar de CHAR
o
VARCHAR
para evitar problemas potenciales con
eliminación de espacios finales que pueden cambiar los valores
de datos.
-
AES_ENCRYPT(
str
,key_str
) ,AES_DECRYPT(
crypt_str
,key_str
)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
NULL
, el resultado de esta función también esNULL
.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 * (trunc(
string_length
/ 16) + 1).Si
AES_DECRYPT()
detecata datos inválidos o relleno incorrecto, retornaNULL
. Sin embargo, es posible paraAES_DECRYPT()
retornar un valor noNULL
(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));
AES_ENCRYPT()
yAES_DECRYPT()
pueden considerarse las funciones de encriptación criptográficamente más seguras disponibles en MySQL. -
DECODE(
crypt_str
,pass_str
)Desencripta la cadena encriptada
crypt_str
usandopass_str
como contraseña.crypt_str
debe ser una cadena retornada deENCODE()
. -
ENCODE(
str
,pass_str
)Encripta
str
usandopass_str
como contraseña. Para desencriptar el resultado, useDECODE()
.El resultado es una cadena binaria de la misma longitud que
str
. Si quiere guardarlo en una columna, use una columna de tipoBLOB
. -
DES_DECRYPT(
crypt_str
[,key_str
])Desencripta una cadena encriptada con
DES_ENCRYPT()
. En caso de error, esta función retornaNULL
.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
key_str
,DES_DECRYPT()
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 privilegioSUPER
. El fichero clave puede especificarse con la opción del servidor--des-key-file
.Si le pasa a esta función el argumento
key_str
, esta cadena se usa como la clave para desencriptar el mensaje.Si el argumento
crypt_str
no parece una cadena encriptada, MySQL retornacrypt_str
. -
DES_ENCRYPT(
str
[,(key_num
|key_str
)])Encriptas la cadena con la clave dada usando el algoritmo triple-DES. En caso de error, retorna
NULL
.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
DES_ENCRYPT()
, si se ha dado uno:Argumento Descripción Sin argumento Se usa la primera clave del fichero clave DES. key_num
El número de clave dado (0-9) del fichero clave DES se usa. key_str
Se usa la cadena clave dada para encriptar str
.El fichero clave puede especificarse con la opción de servidor
--des-key-file
.La cadena retornada es una cadena binaria donde el primer carácter es
CHAR(128 | key_num)
.Se añade 128 para hacer más sencillo reconocer una clave encriptada. Si usa una cadena clave,
key_num
es 127.La longitud de la cadena para el resultado es
new_len
=orig_len
+ (8-(orig_len
% 8))+1.Cada línea en el fichero clave DES tiene el siguiente formato:
key_num
des_key_str
Cada
key_num
debe ser un número en el rango de0
a9
. Las líneas en el fichero pueden estar en cualquier orden.des_key_str
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 paraDES_ENCRYPT()
Puede decir a MySQL que lea un nuevo valor de clave del fichero clave con el comando
FLUSH DES_KEY_FILE
. Esto necesita el privilegioRELOAD
.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');
-
ENCRYPT(
str
[,salt
])Encripta
str
usando la llamada de sistema Unixcrypt()
. El argumentosalt
debe ser una cadena con al menos dos carácteres. Si no se da argumentosalt
, se usa un valor aleatorio.mysql> SELECT ENCRYPT('hello'); -> 'VxuFAJXVARROc'
ENCRYPT()
ignora todo excepto los primeros ochos carácteres destr
, al menos en algunos sistemas. Este comportamiento viene determinado por la implementación de la llamada de sistemacrypt()
subyacente.Si
crypt()
no está disponible en su sistema (como pasa en Windows),ENCRYPT()
siempre retornaNULL
. Debido a esto, recomandamos que useMD5()
oSHA1()
en su lugar, y que estas dos funciones existen en todas las plataformas. -
MD5(
str
)Calcula una checksum MD5 de 128-bit para la cadena. El valor se retorna como una cadena binaria de dígitos 32 hex ,o
NULL
si el argumento eraNULL
. 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
BINARY
en Sección 12.8, “Funciones y operadores de cast”. -
OLD_PASSWORD(
str
)OLD_PASSWORD()
se añadió en MySQL 4.1,cuando se cambión la implementación dePASSWORD()
para mejorar la seguridad.OLD_PASSWORD()
retorna el valor de la implementación pre-4.1 dePASSWORD()
, 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”. -
PASSWORD(
str
)Calcula y retorna una cadena de contraseña de la contraseña en texto plano
str
, oNULL
si el argumento eraNULL
. Esta es la función que se usa para encriptar contraseñas MySQL para almacenar en la columnaPassword
de la tablauser
.mysql> SELECT PASSWORD('badpwd'); -> '7f84554057dd964b'
La encriptación de
PASSWORD()
es de un sentido (no reversible).PASSWORD()
no realiza encriptación de contraseña de la misma forma que se encriptan las contraseñas Unix. ConsulteENCRYPT()
.Nota: La función
PASSWORD()
se usa por el sistema de autenticación en MySQL Server; no no debe usarlo en su propias aplicaciones. Para ese propósito, useMD5()
oSHA1()
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. -
SHA1(
str
),SHA(
str
)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
NULL
si el argumento eraNULL
. 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ñasmysql> SELECT SHA1('abc'); -> 'a9993e364706816aba3e25717850c26c9cd0d89d'
SHA1()
puede considerarse un equivalente criptográficamente más seguro queMD5()
.SHA()
es sinónimo deSHA1()
.
-
BENCHMARK(
count
,expr
)La función
BENCHMARK()
ejecuta la expresiónexpr
repetidamentecount
veces. Puede usarse para ver lo rápido que MySQL procesa la expresión. El valor resultado siempre es0
. 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
BENCHMARK()
varias veces, y interpretar el resultado teniendo en cuenta la carga de la máquina servidor. -
CHARSET(
str
)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'
-
COERCIBILITY(
str
)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 0
Colación explícita Valor con la cláusula COLLATE
1
Sin colación Concatenación de cadenas con distintas colaciones 2
Colación implícita Valor de columna 3
Constante de sistema Valor de retorno USER()
4
Coercible Cadena literal 5
Ignorable NULL
o una expresión derivada deNULL
Antes de MySQL 5.0.3, los valores de retorno se muestran como sigue, y las funciones tales como
USER()
tienen una coerzabilidad de 2:Coerzabilidad Significado Ejemplo 0
Colación explícita Valor con la cláusula COLLATE
1
Sin colación Concatenación de cadenas con distintas colaciones 2
Colación implícita Valor de columna 3
Coercible Cadena literal Los valores menores tienen precedencia mayor.
-
COLLATION(
str
)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'
-
CONNECTION_ID()
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
-
CURRENT_USER()
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
USER()
.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
davida
(como se indica por el valor de la funciónUSER()
), el sevidor autentica al cliente usando una cuenta de usuario anónimo (como se ve por la parte de usuario vacía del valorCURRENT_USER()
). Una forma en que esto puede ocurrir es que no haya cuenta listada en las cuentas de permisos paradavida
.En MySQL 5.0, la cadena retornada por
CURRENT_USER()
usa el conjunto de carácteresutf8
. -
DATABASE()
Retorna el nombre de base de datos por defecto (actual). En MySQL 5.0, la cadena tiene el conjunto de carácteres
utf8
.mysql> SELECT DATABASE(); -> 'test'
No hay base de datos por defecto,
DATABASE()
retornaNULL
. -
FOUND_ROWS()
Un comando
SELECT
puede incluir una cláusulaLIMIT
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 sinLIMIT
, pero sin volver a lanzar el comando. Para obtener este conteo de registros, incluya la opciónSQL_CALC_FOUND_ROWS
en el comandoSELECT
, luego invoqueFOUND_ROWS()
:mysql> SELECT SQL_CALC_FOUND_ROWS * FROM
tbl_name
-> WHERE id > 100 LIMIT 10; mysql> SELECT FOUND_ROWS();El segundo
SELECT
retorna un número indicando cuantos registros habría retornado el primerSELECT
sin la cláusulaLIMIT
. (Si el comando precendente no incluye la opciónSQL_CALC_FOUND_ROWS
,FOUND_ROWS()
puede retornar un resultado distinto cuando se usaLIMIT
y cuando no.)Tenga en cuenta que si usa
SELECT SQL_CALC_FOUND_ROWS
, 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 sinLIMIT
, ya que el conjunto de resultados no necesita ser enviado al cliente.SQL_CALC_FOUND_ROWS
yFOUND_ROWS()
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. UsandoFOUND_ROWS()
puede determinar cuántas páginas necesita para el resto de resultados.El uso de
SQL_CALC_FOUND_ROWS
yFOUND_ROWS()
es más complejo para consultasUNION
que para comandosSELECT
simples, ya queLIMIT
puede ocurrir en varios lugares en unaUNION
. Puede aplicarse a comandosSELECT
individuales en laUNION
, o global en el resultado deUNION
como conjunto.La intención de
SQL_CALC_FOUND_ROWS
paraUNION
es que debe retornar el número de registros que se retornarían sin unLIMIT
globar. Las condiciones para uso deSQL_CALC_FOUND_ROWS
conUNION
son:-
La palabra clave
SQL_CALC_FOUND_ROWS
debe aparecer en el primerSELECT
de laUNION
. -
El valor de
FOUND_ROWS()
es exacto sólo si se usaUNION ALL
. Si se usaUNION
sinALL
, se eliminan duplicados y el valor deFOUND_ROWS()
es sólo aproximado. -
Si no hay
LIMIT
enUNION
, se ignoraSQL_CALC_FOUND_ROWS
y retorna el número de registros en la tabla temporal que se crea para procesarUNION
.
-
-
LAST_INSERT_ID()
,LAST_INSERT_ID(
expr
)Retorna el último valor generado automáticamente que se insertó en una columna
AUTO_INCREMENT
.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
AUTO_INCREMENT
más reciente generado por ese cliente. Este valor no puede ser afectado por otros clientes, incluso si generan valoresAUTO_INCREMENT
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
LAST_INSERT_ID()
no cambia si actualiza la columnaAUTO_INCREMENT
de un registro con un valor no mágico (esto es, un valor que no esNULL
ni0
).Si inserta varios registros a la vez con un comando de inserción
LAST_INSERT_ID()
retorna el valor del primer registro insertado. La razón para esto es hacer posible reproducir fácilmente el mismo comandoINSERT
contra otro servidor.Si usa
INSERT IGNORE
y el registro se ignora, el contadorAUTO_INCREMENT
no se incrementa yLAST_INSERT_ID()
retorna 0, lo que refleja que no se ha insertado ningún registro. (Antes de MySQL 4.1,AUTO_INCREMENT
el contador se incrementa yLAST_INSERT_ID()
retorna el nuevo valor.)Si se da
expr
como argumento paraLAST_INSERT_ID()
, el valor del argumento se retorna por la función y se recuerda como el siguiente valor a ser retornado porLAST_INSERT_ID()
. 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
UPDATE
incrementa el contador de secuencia y causa que la siguiente llamada aLAST_INSERT_ID()
retorne el valor actualizado. El comandoSELECT
recibe ese valor. La función de la API Cmysql_insert_id()
puede usarse para obtener el valor . Consulte Sección 24.3.3.34, “mysql_insert_id()
”.
Puede generar secuencias sin llamar a
LAST_INSERT_ID()
, 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 comandoUPDATE
y obtener su propio valor de secuencia con el comandoSELECT
(omysql_insert_id()
), sin afectar o ser afectado por otros clientes que generen sus propios valores de secuencia.Tenga en cuenta que
mysql_insert_id()
sólo se actualiza tras los comandosINSERT
yUPDATE
, así que no puede usar la función de la API C para recibir el valor deLAST_INSERT_ID(
expr
) tras ejecutar otros comandos SQL comoSELECT
oSET
. -
-
ROW_COUNT()
ROW_COUNT()
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 Cmysql_affected_rows()
.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)
ROW_COUNT()
se añadió en MySQL 5.0.1. -
SESSION_USER()
SESSION_USER()
es sinónimo deUSER()
. -
SYSTEM_USER()
SYSTEM_USER()
es sinónimo deUSER()
. -
USER()
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
CURRENT_USER()
.Puede extraer la parte de nombre de usuario así:
mysql> SELECT SUBSTRING_INDEX(USER(),'@',1); -> 'davida'
En MySQL 5.0,
USER()
retorna un valor en el conjunto de carácteresutf8
, así que debe asegurarse que la literal'@'
se interpreta en el conjunto de carácteres:mysql> SELECT SUBSTRING_INDEX(USER(),_utf8'@',1); -> 'davida'
-
VERSION()
Retorna una cadena que indica la versión del servidor MySQL. La cadena usa el conjunto de carácteres
utf8
.mysql> SELECT VERSION(); -> '5.0.9-standard'
Tenga en cuenta que si su cadena de versión acaba con
-log
significa que el logueo está activado.
-
DEFAULT(
col_name
)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;
-
FORMAT(
X
,D
)Formatea el número
X
a un formato como'#,###,###.##'
, redondeado aD
decimales, y retorna el resultado como una cadena. SiD
es0
, 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'
-
GET_LOCK(
str
,timeout
)Intenta obtener un bloqueo con un nombre dado por la cadena
str
, con un tiempo máximo detimeout
segundos. Retorna1
si el bloqueo se obtiene con éxito,0
si el intento supera el tiempo máximo (por ejemplo, debido a que otro cliente haya bloqueado el nombre préviamente), oNULL
si ocurre un error (tal como quedarse sin memoria o que el flujo acabe con mysqladmin kill). Si tiene un bloqueo obtenido conGET_LOCK()
, se libera cuando ejecutaRELEASE_LOCK()
, ejecuta un nuevoGET_LOCK()
, 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,
GET_LOCK()
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 formadb_name.str
oapp_name.str
.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
RELEASE_LOCK()
retornaNULL
debido a que el bloqueo'lock1'
se libera automáticamente por la segunda llamadaGET_LOCK()
. -
INET_ATON(
expr
)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
209*256^3 + 207*256^2 + 224*256 + 40
.INET_ATON()
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
INET_ATON()
, se recomiendoa que use una columnaINT UNSIGNED
. Si usa una columnaINT
(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 porINET_ATON('127.255.255.255')
). Consulte Sección 11.2, “Tipos numéricos”. -
INET_NTOA(
expr
)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'
-
IS_FREE_LOCK(
str
)Chequea si el nombre de bloqueo
str
está libre para uso (esto es, no bloqueado). Retorna1
si el bloqueo está libre (nadie lo usa para bloquear),0
si el bloqueo está en uso, yNULL
en errores (tales como argumentos incorrectos). -
IS_USED_LOCK(
str
)Chequea si el nombre de bloqueo
str
está en uso (esto es, bloqueado). Si es así, retorna el identificador de conexión del cliente que tiene el bloqueo. De otro modo, retornaNULL
. -
MASTER_POS_WAIT(
log_name
,log_pos
[,timeout
])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
NULL
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-1
si se agota el tiempo de espera. Si el flujo SQL esclavo para mientrasMASTER_POS_WAIT()
está esperando, la función retornaNULL
. Si el eslavo pasa la posición especificada, la función retorna inmediatamente.Si un valor
timeout
se especifica,MASTER_POS_WAIT()
para de esprar cuando pasantimeout
segundos.timeout
debe ser superior a 0; un cero otimeout
negativo significa que no hay timeout. -
RELEASE_LOCK(
str
)Libera el bloqueo nombrado por la cadena
str
obtenida conGET_LOCK()
. Retorna1
si el bloqueo se libera,0
si el bloqueo no estaba bloqueado por este flujo (en cuyo caso el bloqueo no se libera), yNULL
si el bloqueo nombrado no existía. El bloqeuo no existe si nunca se obtuvo por una llamada aGET_LOCK()
o si había sido liberado préviamente.El comando
DO
es conveniente para usar conRELEASE_LOCK()
. Consulte Sección 13.2.2, “Sintaxis deDO
”. -
UUID()
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
UUID()
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
aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
:-
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
UUID()
no funciona todavía con replicación. -