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.