En MySQL, las variables se utilizan para almacenar valores temporales que pueden ser utilizados dentro de una sesión o un bloque de código. Existen dos tipos principales de variables:
@@global.
) → Afectan a toda la instancia de MySQL.@@session.
) → Afectan solo a la sesión actual.DECLARE
, SET
) → Se usan dentro de procedimientos y funciones.@@global.
)Las variables globales son parámetros del sistema MySQL y afectan a todas las conexiones. Solo pueden ser modificadas por usuarios con privilegios administrativos.
📌 Consultar una variable global:
SHOW GLOBAL VARIABLES LIKE 'max_connections';
SELECT @@global.max_connections;
🔹 Ejemplo: Cambiar el número máximo de conexiones globales
SET @@global.max_connections = 200;
@@session.
)Las variables de sesión afectan solo a la conexión actual del usuario y desaparecen al cerrar la sesión.
📌 Consultar una variable de sesión:
SHOW SESSION VARIABLES LIKE 'autocommit';
SELECT @@session.autocommit;
🔹 Ejemplo: Desactivar autocommit
solo en la sesión actual
SET @@session.autocommit = 0;
✅ Diferencia clave:
@@global.
afecta a todas las conexiones.@@session.
afecta solo a la conexión actual.Las variables locales se usan dentro de procedimientos almacenados, funciones o bloques de código dentro de BEGIN ... END
.
DECLARE
)Las variables locales solo existen dentro del bloque donde fueron declaradas.
🔹 Ejemplo: Declarar y usar una variable en un procedimiento
DELIMITER $$
CREATE PROCEDURE EjemploVariables()
BEGIN
DECLARE mensaje VARCHAR(50);
SET mensaje = 'Hola, esta es una variable local';
SELECT mensaje;
END $$
DELIMITER ;
📌 Llamar al procedimiento:
CALL EjemploVariables();
@variable
)Las variables de usuario son visibles en toda la sesión y no requieren ser declaradas con DECLARE
.
📌 Asignar valores a una variable de usuario (@
)
SET @nombre = 'Juan';
SELECT @nombre;
También se pueden asignar dentro de una consulta:
SELECT @total_pedidos := COUNT(*) FROM pedidos WHERE id_cliente = 1;
SELECT @total_pedidos; -- Muestra el resultado
🔹 Diferencia clave entre variables locales y de usuario
Tipo de Variable | Declaración | Alcance |
---|---|---|
Local (DECLARE ) |
Dentro de BEGIN ... END |
Solo dentro del procedimiento |
Usuario (@ ) |
Con SET o := |
Disponible en toda la sesión |
Las variables son útiles para almacenar resultados intermedios y evitar consultas repetitivas.
🔹 Ejemplo: Procedimiento con variables locales para calcular total de pedidos
DELIMITER $$
CREATE PROCEDURE TotalPedidosCliente(IN id_cliente INT, OUT total INT)
BEGIN
DECLARE total_pedidos INT;
SELECT COUNT(*) INTO total_pedidos FROM pedidos WHERE pedidos.id_cliente = id_cliente;
SET total = total_pedidos;
END $$
DELIMITER ;
📌 Llamada con variable de salida
CALL TotalPedidosCliente(2, @total);
SELECT @total;
✅ Usa variables globales (@@global.
) con precaución, ya que afectan toda la base de datos.
✅ Usa variables de sesión (@@session.
) para configurar opciones temporales en la conexión.
✅ Usa variables locales (DECLARE
) dentro de procedimientos para almacenar datos temporales.
✅ Usa variables de usuario (@var
) para compartir valores dentro de una sesión.
✅ Evita reutilizar variables de usuario en diferentes sesiones, ya que no están aisladas.