MySQL har ett koncept med användardefinierade variabler .
De är löst skrivna variabler som kan initieras någonstans i en session och behålla sitt värde tills sessionen slutar.
De är infogade med en @
tecken, så här:@var
Du kan initiera denna variabel med en SET
uttalande eller inuti en fråga:
SET @var = 1
SELECT @var2 := 2
När du utvecklar en lagrad procedur i MySQL kan du skicka indataparametrarna och deklarera de lokala variablerna:
DELIMITER //
CREATE PROCEDURE prc_test (var INT)
BEGIN
DECLARE var2 INT;
SET var2 = 1;
SELECT var2;
END;
//
DELIMITER ;
Dessa variabler har inte några prefix.
Skillnaden mellan en procedurvariabel och en sessionsspecifik användardefinierad variabel är att en procedurvariabel återinitieras till NULL
varje gång proceduren anropas, medan den sessionsspecifika variabeln inte är:
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
Som du kan se, var2
(procedurvariabel) återinitieras varje gång proceduren anropas, medan @var2
(sessionsspecifik variabel) är det inte.
(Förutom användardefinierade variabler, MySQL även har några fördefinierade "systemvariabler", som kan vara "globala variabler" såsom @@global.port
eller "sessionsvariabler" som @@session.sql_mode
; dessa "sessionsvariabler" är inte relaterade till sessionsspecifika användardefinierade variabler.)