Asignar a una variable el resultado de una Sentencia SELECT para utilizarla en otras operaciones es algo que se puede realizar en MySQL de una forma sencilla. La sintáxis es  @nombreVariable := valor. Donde nombreVariable es el nombre de la variable y el valor, es el resultado que queremos asignar. Esta variable puede utilizarse en posteriores sentencias donde la sintaxis de la misma permita incluir expresiones, como es el caso de clausulas WHERE o en sentencias INSERT.

1
SELECT @variable:= campo FROM  TABLA WHERE campo='algun valor'

Una vez que obtenemos el valor del campo, podemos utilizarlo en otras sentencias

1
DELETE FROM TABLA WHERE campo= @variable

Podemos combinar campos de nuestra tabla, realizar operaciones  y el resultado asignarlo a una variable

1
SELECT @variable:= MAX(campo,campo2) FROM  TABLA WHERE campo='algun valor'

Uno de los usos más comunes es la de almacenar el resultado del ultimo indice creado en una tabla.

1
mysql> SELECT @id := LAST_INSERT_ID( );

Debemos tener en cuenta que estas variables solo pueden almacenar un único valor, por lo que si intentásemos guardar un conjunto de resultados como por ejemplo:

1
mysql> SELECT @valor:= valor FROM Nombre;

Suponiendo que la tabla posea más de 1 registro el valor de la variable será la del último registro obtenido. Si una sentencia no retorna información, no se realiza ninguna asignación y la variable tendrá el último valor asignado, si no se ha asignado ningun valor, el valor será NULL. Si queremos que una variable en particular posea un valor determinado antes de una sentencia utilizamos la sentencia SET.

1
2
mysql> SET @suma = 4 + 7;
mysql> SELECT @SUM;

Esta variable persistirá en memoria, hasta que le asignemos otro valor o cerremos la sesión MySQL. Por último las variables solo pueden utilizarse donde se puedan incluir expresiones, hay que estar pendiente de donde es, ya que no se permiten utilizar variables donde se deben definir contantes o identificadores literales. Por Ejemplo:

1
2
3
4
5
mysql> SET @tbl_name = CONCAT('tbl_',FLOOR(RAND( )*1000000));
mysql> <strong>CREATE TABLE @tbl_name (int_col INT);</strong>

ERROR 1064 at line 2: You have an error IN your SQL syntax near '@tbl_name
(int_col INT)'
at line 1

 

(Visited 15,340 times, 3 visits today)