MySQL tiene un concepto de variables definidas por el usuario .
Son variables escritas libremente que se pueden inicializar en algún lugar de una sesión y mantienen su valor hasta que finaliza la sesión.
Se anteponen con un @
firmar, así:@var
Puede inicializar esta variable con un SET
declaración o dentro de una consulta:
SET @var = 1
SELECT @var2 := 2
Cuando desarrolla un procedimiento almacenado en MySQL, puede pasar los parámetros de entrada y declarar las variables locales:
DELIMITER //
CREATE PROCEDURE prc_test (var INT)
BEGIN
DECLARE var2 INT;
SET var2 = 1;
SELECT var2;
END;
//
DELIMITER ;
Estas variables no se anteponen con ningún prefijo.
La diferencia entre una variable de procedimiento y una variable definida por el usuario específica de la sesión es que una variable de procedimiento se reinicializa a NULL
cada vez que se llama al procedimiento, mientras que la variable específica de la sesión no lo es:
CREATE PROCEDURE prc_test ()
BEGIN
DECLARE var2 INT DEFAULT 1;
SET var2 = var2 + 1;
SET @var2 = @var2 + 1;
SELECT var2, @var2;
END;
SET @var2 = 1;
CALL prc_test();
var2 @var2
--- ---
2 2
CALL prc_test();
var2 @var2
--- ---
2 3
CALL prc_test();
var2 @var2
--- ---
2 4
Como puede ver, var2
(variable de procedimiento) se reinicializa cada vez que se llama al procedimiento, mientras que @var2
(variable específica de la sesión) no lo es.
(Además de las variables definidas por el usuario, MySQL también tiene algunas "variables del sistema" predefinidas, que pueden ser "variables globales" como @@global.port
o "variables de sesión" como @@session.sql_mode
; estas "variables de sesión" no están relacionadas con las variables definidas por el usuario específicas de la sesión).