You are on page 1of 6

The world's most popular open source database

Login | Register

Developer ZoneDownloads
Documentation
MySQL Server MySQL Enterprise MySQL Workbench MySQL Cluster MySQL Connectors Top
ic Guides Expert Guides Other Docs Archives About


Documentation Library
Table of Contents
MySQL 5.0 Manual
Search manual:

MySQL 5.0 Reference Manual :: 12 Funciones y operadores :: 12.9 Otras funciones
:: 12.9.3 Funciones de informacin
12.9.2 Funciones de cifrado
12.9.4 Funciones varias
Section Navigation [Toggle]
12.9 Otras funciones
12.9.1 Funciones bit
12.9.2 Funciones de cifrado
12.9.3 Funciones de informacin
12.9.4 Funciones varias
12.9.3. Funciones de informacin
BENCHMARK(count,expr)
La funcin BENCHMARK() ejecuta la expresin expr repetidamente count veces. Puede us
arse para ver lo rpido que MySQL procesa la expresin. El valor resultado siempre e
s 0. El uso pretendido es desde dentro del cliente mysql, que reporte tiempos de
ejecucin 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 d
e CPU en el servidor. Se recomienda ejecutar BENCHMARK() varias veces, y interpr
etar el resultado teniendo en cuenta la carga de la mquina servidor.
CHARSET(str)
Retorna el conjunto de caracteres 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 colacin 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 Colacin explcita Valor con la clusula COLLATE
1 Sin colacin Concatenacin de cadenas con distintas colaciones
2 Colacin implcita Valor de columna
3 Constante de sistema Valor de retorno USER()
4 Coercible Cadena literal
5 Ignorable NULL o una expresin derivada de NULL
Antes de MySQL 5.0.3, los valores de retorno se muestran como sigue, y las funci
ones tales como USER() tienen una coerzabilidad de 2:
Coerzabilidad Significado Ejemplo
0 Colacin explcita Valor con la clusula COLLATE
1 Sin colacin Concatenacin de cadenas con distintas colaciones
2 Colacin implcita Valor de columna
3 Coercible Cadena literal
Los valores menores tienen precedencia mayor.
COLLATION(str)
Retorna la colacin para el conjunto de caracteres 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 conexin (ID del thread) para la conexin. Cada conexin tiene su
propio y nico ID.
mysql> SELECT CONNECTION_ID();
-> 23786
CURRENT_USER()
Retorna la combinacin de nombre de usuario y de equipo que tiene la sesin actual.
Este valor se corresponde con la cuenta MySQL que determina sus privilegios de a
ceso. 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 funcin USER() ), el servidor autentica al cli
ente usando una cuenta de usuario annimo (como se ve por la parte de usuario vaca
del valor CURRENT_USER() ). Una forma en que esto puede ocurrir es que no haya c
uenta listada en las cuentas de permisos para davida.
En MySQL 5.0, la cadena retornada por CURRENT_USER() usa el conjunto de caracter
es utf8 .
DATABASE()
Retorna el nombre de base de datos por defecto (actual). En MySQL 5.0, la cadena
tiene el conjunto de caracteres utf8 .
mysql> SELECT DATABASE();
-> 'test'
No hay base de datos por defecto, DATABASE() retorna NULL.
FOUND_ROWS()
Un comando SELECT puede incluir una clusula LIMIT para restringir el nmero de regi
stros que el servidor retorna al cliente. En algunos casos, es deseable saber cun
tos registos habra retornado el comando sin LIMIT, pero sin volver a lanzar el co
mando. Para obtener este conteo de registros, incluya la opcin SQL_CALC_FOUND_ROW
S en el comando SELECT , luego invoque FOUND_ROWS() :
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
-> WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();
El segundo SELECT retorna un nmero indicando cuantos registros habra retornado el
primer SELECT sin la clusula LIMIT . (Si el comando precendente no incluye la opc
in SQL_CALC_FOUND_ROWS , FOUND_ROWS() puede retornar un resultado distinto cuando
se usa LIMIT y cuando no.)
Tenga en cuenta que si usa SELECT SQL_CALC_FOUND_ROWS, MySQL debe calcular cuntos
registros hay en el conjunto de resultdos completo. Sin embargo, esto es ms rpido
que ejecutar la consulta de nuevo sin LIMIT, ya que el conjunto de resultados n
o necesita ser enviado al cliente.
SQL_CALC_FOUND_ROWS y FOUND_ROWS() pueden ser tiles en situaciones donde puede qu
erer restringir el nmero de registros que retorna una consulta, pero tambin determ
inar el nmero de registros en el conjunto de resultados entero sin ejecutar la co
nsulta de nuevo. Un ejemplo es el script Web que presenta una salida paginada co
nteniendo enlaces a las pginas que muestran otras secciones de un resultado de bsq
ueda. Usando FOUND_ROWS() puede determinar cuntas pginas necesita para el resto de
resultados.
El uso deSQL_CALC_FOUND_ROWS y FOUND_ROWS() es ms complejo para consultas UNION q
ue para comandos SELECT simples, ya que LIMIT puede ocurrir en varios lugares en
una UNION. Puede aplicarse a comandos SELECT individuales en la UNION, o global
en el resultado de UNION como conjunto.
La intencin de SQL_CALC_FOUND_ROWS para UNION es que debe retornar el nmero de reg
istros que se retornaran sin un LIMIT globar. Las condiciones para uso de SQL_CAL
C_FOUND_ROWS con UNION son:
La palabra clave SQL_CALC_FOUND_ROWS debe aparecer en el primer SELECT de la UNI
ON.
El valor de FOUND_ROWS() es exacto slo si se usa UNION ALL . Si se usa UNION sin
ALL, se eliminan duplicados y el valor de FOUND_ROWS() es slo aproximado.
Si no hay LIMIT en UNION, se ignora SQL_CALC_FOUND_ROWS y retorna el nmero de reg
istros en la tabla temporal que se crea para procesar UNION.
LAST_INSERT_ID(), LAST_INSERT_ID(expr)
Retorna el ltimo valor generado automticamente que se insert en una columna AUTO_IN
CREMENT.
mysql> SELECT LAST_INSERT_ID();
-> 195
El ltimo ID generado se mantiene en el servidor para cada conexin. Esto significa
que el valor de la funcin retorna a cada cliente el valor AUTO_INCREMENT ms recien
te generado por ese cliente. Este valor no puede ser afectado por otros clientes
, incluso si generan valores AUTO_INCREMENT ellos mismos. Este comportamiento as
egura que reciba sus propios IDs sin tener en cuenta la actividad de otros clien
tes y sin la necesidad de bloqueos o transacciones.
El valor de LAST_INSERT_ID() no cambia si actualiza la columna AUTO_INCREMENT de
un registro con un valor no mgico (esto es, un valor que no es NULL ni 0).
Si inserta varios registros a la vez con un comando de insercin LAST_INSERT_ID()
retorna el valor del primer registro insertado. La razn para esto es hacer posibl
e reproducir fcilmente el mismo comando INSERT contra otro servidor.
Si usa INSERT IGNORE y el registro se ignora, el contador AUTO_INCREMENT no se i
ncrementa y LAST_INSERT_ID() retorna 0, lo que refleja que no se ha insertado ni
ngn registro. (Antes de MySQL 4.1, AUTO_INCREMENT el contador se incrementa y LAS
T_INSERT_ID() retorna el nuevo valor.)
Si se da expr como argumento para LAST_INSERT_ID(), el valor del argumento se re
torna por la funcin y se recuerda como el siguiente valor a ser retornado por LAS
T_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 nmeros 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 l
lamada a LAST_INSERT_ID() retorne el valor actualizado. El comando SELECT recibe
ese valor. La funcin de la API C mysql_insert_id() puede usarse para obtener el
valor . Consulte Seccin 24.2.3.34, mysql_insert_id().
Puede generar secuencias sin llamar a LAST_INSERT_ID(), pero la utilidad de usar
esta funcin de esta forma es que el valor ID se mantiene en el servidor como el l
timo valor generado automticamente. Es vlido para multi usuarios porque varios cli
entes pueden realizar el comando UPDATE y obtener su propio valor de secuencia c
on el comando SELECT (o mysql_insert_id()), sin afectar o ser afectado por otros
clientes que generen sus propios valores de secuencia.
Tenga en cuenta que mysql_insert_id() slo se actualiza tras los comandos INSERT y
UPDATE , as que no puede usar la funcin de la API C para recibir el valor de LAST
_INSERT_ID(expr) tras ejecutar otros comandos SQL como SELECT o SET.
ROW_COUNT()
ROW_COUNT() retorna el nmero de registros actualizados, insertados o borrados por
el comando precedente. Esto es lo mismo que el nmero de registros que muestra el
cliente mysql y el valor de la funcin de la API C mysql_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 aadi en MySQL 5.0.1.
SESSION_USER()
SESSION_USER() es sinnimo de USER().
SYSTEM_USER()
SYSTEM_USER() es sinnimo de USER().
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 de
l 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 caracteres utf8, as que d
ebe asegurarse que la literal '@' se interpreta en el conjunto de caracteres:
mysql> SELECT SUBSTRING_INDEX(USER(),_utf8'@',1);
-> 'davida'
VERSION()
Retorna una cadena que indica la versin del servidor MySQL. La cadena usa el conj
unto de caracteres utf8 .
mysql> SELECT VERSION();
-> '5.0.9-standard'
Tenga en cuenta que si su cadena de versin acaba con -log significa que el logueo
est activado.
sta es una traduccin del manual de referencia de MySQL, que puede encontrarse en d
ev.mysql.com. El manual de referencia original de MySQL est escrito en ingls, y es
ta traduccin no necesariamente est tan actualizada como la versin original. Para cu
alquier sugerencia sobre la traduccin y para sealar errores de cualquier tipo, no
dude en dirigirse a mysql-es@vespito.com.
Copyright 1997, 2011, Oracle and/or its affiliates. All rights reserved. Legal N
otices
Top / Previous / Next / Up / Table of Contents
Developer Zone
Documentation
Developer Articles
Forums
Lists
Bugs
Worklog
Planet MySQL
Labs
Downloads
MySQL Community Server
MySQL Proxy
MySQL Cluster
MySQL Workbench
MySQL Connectors
Archives
Documentation
MySQL Reference Manuals
MySQL Workbench
Expert Guides
Topic Guides
MySQL Cluster
Other Documents
About
Archives
About MySQL
Contact Us
How to Buy
Partners
Job Opportunities
Site Map
Legal
Legal Policies
Your Privacy Rights
Terms of Use
Trademark Policy
Contributor Agreement
2014, Oracle Corporation and/or its affiliatescomo volverse vago

You might also like