MySQL hat ein Konzept von benutzerdefinierten Variablen .
Sie sind lose typisierte Variablen, die irgendwo in einer Sitzung initialisiert werden können und ihren Wert behalten, bis die Sitzung endet.
Ihnen wird ein @
vorangestellt wie folgt:@var
Sie können diese Variable mit einem SET
initialisieren -Anweisung oder innerhalb einer Abfrage:
SET @var = 1
SELECT @var2 := 2
Wenn Sie eine gespeicherte Prozedur 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 auf NULL
reinitialisiert wird jedes Mal, wenn die Prozedur aufgerufen wird, während die sitzungsspezifische Variable nicht:
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 neu initialisiert, während @var2
(sitzungsspezifische Variable) ist nicht.
(Neben benutzerdefinierten Variablen kann MySQL auch hat einige vordefinierte "Systemvariablen", die "globale Variablen" sein können, wie @@global.port
oder "Sitzungsvariablen" wie @@session.sql_mode
; diese "Sitzungsvariablen" haben nichts mit sitzungsspezifischen benutzerdefinierten Variablen zu tun.)