Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL :@variable contre variable. Quelle est la différence?

MySQL a un concept de variables définies par l'utilisateur .

Ce sont des variables faiblement typées qui peuvent être initialisées quelque part dans une session et conserver leur valeur jusqu'à la fin de la session.

Ils sont précédés d'un @ signer, comme ceci :@var

Vous pouvez initialiser cette variable avec un SET instruction ou dans une requête :

SET @var = 1

SELECT @var2 := 2

Lorsque vous développez une procédure stockée dans MySQL, vous pouvez passer les paramètres d'entrée et déclarer les variables locales :

DELIMITER //

CREATE PROCEDURE prc_test (var INT)
BEGIN
    DECLARE  var2 INT;
    SET var2 = 1;
    SELECT  var2;
END;
//

DELIMITER ;

Ces variables ne sont précédées d'aucun préfixe.

La différence entre une variable de procédure et une variable définie par l'utilisateur spécifique à la session est qu'une variable de procédure est réinitialisée à NULL à chaque appel de la procédure, alors que la variable propre à la session n'est pas :

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

Comme vous pouvez le voir, var2 (variable de procédure) est réinitialisée à chaque appel de la procédure, tandis que @var2 (variable spécifique à la session) ne l'est pas.

(En plus des variables définies par l'utilisateur, MySQL également a des "variables système" prédéfinies, qui peuvent être des "variables globales" telles que @@global.port ou "variables de session" telles que @@session.sql_mode; ces "variables de session" ne sont pas liées aux variables définies par l'utilisateur spécifiques à la session.)