Cómo declarar y usar las variables en MySQL

Gustavo du Mortier 17 diciembre 2020
  1. Variables definidas por el usuario en MySQL
  2. Inicializar las variables definidas por el usuario
  3. Usar variables como campos en una sentencia SELECT
  4. Declarar variables locales en MySQL
  5. Declarar las variables del sistema en MySQL
Cómo declarar y usar las variables en MySQL

En este artículo del tutorial, explicaremos cómo declarar variables dentro del código SQL para las bases de datos de MySQL.

En los scripts SQL, se pueden utilizar variables para almacenar valores durante la ejecución de una secuencia de comandos y utilizarlos en lugar de literales.

Variables definidas por el usuario en MySQL

MySQL reconoce diferentes tipos de variables. El primer tipo son las variables definidas por el usuario, identificadas por un símbolo @ usado como prefijo. En MySQL, se puede acceder a las variables definidas por el usuario sin necesidad de declararlas o inicializarlas previamente. Si lo hace, se asigna un valor NULL a la variable cuando se inicializa. Por ejemplo, si usas SELECT con una variable sin darle un valor, como en este caso:

SELECT @SomeVariable;

MySQL devuelve un valor NULL.

Inicializar las variables definidas por el usuario

Para inicializar una variable definida por el usuario, necesitas usar una declaración SET o SELECT. Puedes inicializar muchas variables a la vez, separando cada declaración de asignación con una coma, así:

SET @FirstVar=1, @SecondVar=2;

Una vez que asignas un valor a una variable, tendrá un tipo de acuerdo al valor dado. En los ejemplos anteriores, @FirstVar y @SecondVar son del tipo int.

La vida útil de una variable definida por el usuario dura mientras la sesión esté activa, y es invisible para otras sesiones. Una vez que la sesión se cierra, la variable desaparece.

Hay 5 tipos de datos que puedes asignar a una variable definida por el usuario:

  • cadena (binaria o no binaria)
  • entero
  • decimal
  • punto flotante
  • NULL, que puede ser asociado con cualquier tipo.

Para asignar un valor a una variable, puedes usar el símbolo = o :=. Las dos declaraciones siguientes tienen el mismo efecto:

SET @MyIntVar = 1;
SET @MyIntVar := 1;

Usar variables como campos en una sentencia SELECT

Las variables pueden formar parte de las listas de campos de una declaración SELECT. Puedes mezclar variables y nombres de campos cuando especificas campos en una selectora, como en este ejemplo:

SET @IndexVar := 1;
SELECT @IndexVar, ISBN FROM Books;

Declarar variables locales en MySQL

Las variables locales no necesitan el prefijo @ en sus nombres, pero deben ser declaradas antes de que puedan ser usadas. Para declarar una variable local, puedes usar la declaración DECLARE o usarla como un parámetro dentro de una declaración STORED PROCEDURE.

Cuando se declara una variable local, opcionalmente, se le puede asignar un valor por defecto. Si no asignas ningún valor por defecto, la variable se inicializa con un valor NULL.

Cada variable vive dentro de un ámbito, delimitado por el bloque BEGIN ... END que contiene su declaración.

El siguiente ejemplo ilustra dos formas diferentes de utilizar las variables locales: como parámetro del procedimiento y como variable interna del procedimiento:

DELIMITER $$

CREATE PROCEDURE GetUpdatedPrices(itemcount INT)
BEGIN
	DECLARE factor DECIMAL(5, 2);
	SET factor:=3.45;
	SELECT PartNo, Description, itemcount * factor * ListPrice FROM Catalogue;
END
$$

DELIMITER ;

En el ejemplo anterior, la variable itemcount se utiliza como parámetro para pasar un valor al procedimiento. Esa variable se usa luego en la sentencia SELECT para multiplicar el campo ListPrice obtenido de la tabla. La variable local factor se utiliza para almacenar un valor decimal usado para multiplicar el precio resultante.

Declarar las variables del sistema en MySQL

Hay un tercer tipo de variables llamadas variables del sistema que se usan para almacenar valores que afectan a las conexiones individuales de los clientes (variables de SESSION) o que afectan a toda la operación del servidor (variables GLOBAL).

Las variables del sistema se establecen normalmente al inicio del servidor. Para ello, puedes usar la línea de comandos o incluir la sentencia SET en un archivo de opciones. Pero sus valores pueden ser modificados dentro de un script SQL.

Las variables del sistema pueden ser identificadas usando un doble signo @ como prefijo o usando las palabras GLOBAL o SESSION en la sentencia SET. Otra forma de diferenciar las variables del sistema GLOBAL y SESSION es usar un segundo prefijo: global o session. Aquí hay algunos ejemplos de cómo puedes asignar valores a las variables del sistema:

-- Alternative ways to set session system variables:
SET interactive_timeout=30000;
SET SESSION interactive_timeout=30000;
SET @@interactive_timeout=30000;
SET @@local.interactive_timeout=30000;

-- Alternative ways to set global system variables:
SET @@global.interactive_timeout=30000;
SET GLOBAL interactive_timeout=30000;

Para ver las variables de sistema en uso dentro de una sesión o en el servidor, puedes usar la sentencia SHOW VARIABLES. Puedes añadir un operador de comparación para filtrar esta lista si quieres obtener el valor de algunas variables específicas. Por ejemplo:

SHOW VARIABLES LIKE '%timeout%'