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
- Los comentarios están siendo moderados y serán publicados en la brevedad posible.