MySQL hat ein Konzept von benutzerdefinierte Variablen .
Es handelt sich dabei um locker typisierte Variablen, die irgendwo in einer Sitzung initialisiert werden können und ihren Wert bis zum Ende der Sitzung behalten.
Sie sind mit einem vorangestellten @
Zeichen, etwa so: @var
Sie können diese Variable mit einer SET
Anweisung oder innerhalb einer Abfrage:
SET @var = 1
SELECT @var2 := 2
Wenn Sie eine Stored Procedure in MySQL entwickeln, können Sie die Eingabeparameter übergeben und die lokalen Variablen deklarieren:
DELIMITER //
CREATE PROCEDURE prc_test (var INT)
BEGIN
DECLARE var2 INT;
SET var2 = 1;
SELECT var2;
END;
//
DELIMITER ;
Diesen Variablen werden keine Präfixe vorangestellt.
Der Unterschied zwischen einer Prozedurvariablen und einer sitzungsspezifischen benutzerdefinierten Variablen besteht darin, dass eine Prozedurvariable reinitialisiert wird, um NULL
jedes Mal, wenn die Prozedur aufgerufen wird, während die sitzungsspezifische Variable dies nicht tut:
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
Wie Sie sehen können, var2
(Prozedurvariable) wird bei jedem Aufruf der Prozedur reinitialisiert, während @var2
(sitzungsspezifische Variable) ist es nicht.
(Zusätzlich zu den benutzerdefinierten Variablen kann MySQL auch hat einige vordefinierte "Systemvariablen", die "globale Variablen" sein können, wie z.B. @@global.port
oder "Sitzungsvariablen" wie z. B. @@session.sql_mode
; diese "Sitzungsvariablen" haben nichts mit den sitzungsspezifischen benutzerdefinierten Variablen zu tun).