sql >> Base de Datos >  >> RDS >> Mysql

MySQL:@variable frente a variable. ¿Cual es la diferencia?

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).