MySQL
hat das Konzept von benutzerdefinierten Variablen .
Es handelt sich um lose typisierte Variablen, die möglicherweise irgendwo in einer Sitzung initialisiert werden und ihren Wert bis zum Ende der Sitzung beibehalten.
Ihnen ist ein @
Schild wie folgt vorangestellt :@var
Sie können diese Variable mit einer SET
Anweisung oder in einer Abfrage initialisieren :
SET @var = 1
SELECT @var2 := 2
Wenn Sie eine gespeicherte Prozedur in entwickeln MySQL
, 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 die Prozedurvariable bei NULL
jedem Aufruf der Prozedur neu initialisiert 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, wird var2
(Prozedurvariable) bei jedem Aufruf der Prozedur neu initialisiert, während dies bei @var2
(sitzungsspezifischer Variable) nicht der Fall ist.
(Zusätzlich zu benutzerdefinierten Variablen verfügt MySQL auch über einige vordefinierte "Systemvariablen", bei denen es sich um "globale Variablen" @@global.port
oder "Sitzungsvariablen" handeln kann @@session.sql_mode
. Diese "Sitzungsvariablen" stehen in keinem Zusammenhang mit sitzungsspezifischen benutzerdefinierten Variablen Variablen.)