MySQL
a le concept de variables définies par l'utilisateur .
Ce sont des variables de type lâche 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 @
signe, comme ceci:@var
Vous pouvez initialiser cette variable avec une SET
instruction ou à l'intérieur d'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 que la variable de procédure est réinitialisée à NULL
chaque appel de la procédure, tandis que la variable spécifique à 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
contrairement à (variable propre à la session).
(En plus des variables définies par l'utilisateur, MySQL possède également des "variables système" prédéfinies, qui peuvent être des "variables globales" telles que @@global.port
ou des "variables de session" telles que @@session.sql_mode
; ces "variables de session" ne sont pas liées aux définitions d'utilisateur spécifiques à la session variables.)