MySQL heeft een concept van door de gebruiker gedefinieerde variabelen .
Het zijn losjes getypte variabelen die ergens in een sessie kunnen worden geïnitialiseerd en hun waarde behouden totdat de sessie eindigt.
Ze worden voorafgegaan door een @
teken, zoals dit:@var
U kunt deze variabele initialiseren met een SET
statement of in een query:
SET @var = 1
SELECT @var2 := 2
Wanneer u een opgeslagen procedure in MySQL ontwikkelt, kunt u de invoerparameters doorgeven en de lokale variabelen declareren:
DELIMITER //
CREATE PROCEDURE prc_test (var INT)
BEGIN
DECLARE var2 INT;
SET var2 = 1;
SELECT var2;
END;
//
DELIMITER ;
Deze variabelen worden niet voorafgegaan door voorvoegsels.
Het verschil tussen een procedurevariabele en een sessiespecifieke, door de gebruiker gedefinieerde variabele is dat een procedurevariabele opnieuw wordt geïnitialiseerd tot NULL
elke keer dat de procedure wordt aangeroepen, terwijl de sessiespecifieke variabele niet:
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
Zoals je kunt zien, var2
(procedurevariabele) wordt elke keer dat de procedure wordt aangeroepen opnieuw geïnitialiseerd, terwijl @var2
(sessiespecifieke variabele) niet.
(Naast door de gebruiker gedefinieerde variabelen, MySQL ook heeft een aantal vooraf gedefinieerde "systeemvariabelen", die "algemene variabelen" kunnen zijn, zoals @@global.port
of "sessievariabelen" zoals @@session.sql_mode
; deze "sessievariabelen" zijn niet gerelateerd aan sessiespecifieke, door de gebruiker gedefinieerde variabelen.)