Sigueme por RSS! RSS

Uso de variables de usuario en MySQL

MySQL 5.0 soporta variables de usuario, las cuales permiten almacenar un valor y hacer referencia a él más tarde; esto posibilita pasar valores de una sentencia a otra. Las variables de usuario son específicas de la conexión. Esto significa que una variable definida por un cliente no puede ser vista o utilizada por otros clientes. Todas las variables de un cliente son automáticamente liberadas cuando ese cliente abandona la conexión.

Estas variables se definen anteponiendo el carácter arroba (@) al nombre de la variable y estableciéndolas de la siguiente manera:
SET @Mi_Variable = 'VALOR';
SET @Mi_Variable2 = 2;

Para mostrar su valor, usamos la sentencia SELECT
mysql> select @Mi_Variable, @Mi_Variable2;
+--------------+---------------+
| @Mi_Variable | @Mi_Variable2 |
+--------------+---------------+
| VALOR        |             2 |
+--------------+---------------+
1 row in set (0.00 sec)

Al momento de establecer el valor de la variable, podemos usar los caracteres = (solo si usas SET, ya que es un operador de comparación) o := (similar a la asignación de datos en pascal) y el valor puede ser de tipo: entero, real, string o NULL.

Conociendo eso, podemos hacer una consulta luego de una asignación y todo en la misma línea:
mysql> SELECT @ALGO := 60;
+-------------+
| @ALGO := 60 |
+-------------+
|          60 |
+-------------+

Los nombres de las variables son case insensitive, es decir, da igual si están escritas en mayúsculas o minúsculas:
mysql> select @Mi_VaRiaBlE;
+--------------+
| @Mi_VaRiaBlE |
+--------------+
| VALOR        |
+--------------+

Podemos acceder a esas variables en cualquier momento mientras no se cierre la conexión, lo que nos permite incluso hacer cualquier tipo de operación con ellas:
mysql> set @var = 6;
Query OK, 0 rows affected (0.00 sec)

mysql> set @var2 = 17.50;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @var3 := @var + @VAR2 AS resultado;
+-----------+
| resultado |
+-----------+
|     23.50 |
+-----------+

mysql> SELECT (@var3 := ((@var3 + 1.5)*4)) AS resultado;
+-----------+
| resultado |
+-----------+
|    100.00 |
+-----------+

mysql> SET @fecha_de_hoy = CURRENT_DATE();
Query OK, 0 rows affected (0.00 sec)

mysql> select @fecha_de_hoy;
+---------------+
| @fecha_de_hoy |
+---------------+
| 2011-05-14    |
+---------------+

ejemplo: utilizando una variable de usuario previamente inicializada, para restringir el resultado de una consulta dada:
mysql> SELECT @fecha_minima:=MIN(fecha) AS FMin, @fecha_maxima:=MAX(fecha) AS FMax 
FROM mi_tabla;
+------------+------------+
| FMin       | FMax       |
+------------+------------+
| 1970-08-23 | 2011-12-12 |
+------------+------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM mi_tabla WHERE fecha=@fecha_minima;
+----------+------------+
| nombre   | fecha      |
+----------+------------+
| nombre1  | 1970-08-23 |
| nombre4  | 1970-08-23 |
| nombre5  | 1970-08-23 |
+----------+------------+

- Si se hace referencia a una variable aún sin inicializar, su valor será NULL.
mysql> SELECT @variable_no_inicializada;
+---------------------------+
| @variable_no_inicializada |
+---------------------------+
| NULL                      |
+---------------------------+

Las variables de usuario son específicas de la conexión. Esto significa que una variable definida por un cliente no puede ser vista o utilizada por otros clientes. Todas las variables de un cliente son automáticamente liberadas cuando ese cliente abandona la conexión.


fuente: mysql.com

0 comentarios: Suscribete a los comentarios por RSS

Publicar un comentario

- Los comentarios están siendo moderados y serán publicados en la brevedad posible.