MySQL има концепция за дефинирани от потребителя променливи .
Те са свободно въведени променливи, които могат да бъдат инициализирани някъде в сесията и да запазят стойността си до края на сесията.
Те са в началото с @
знак, като този:@var
Можете да инициализирате тази променлива с SET
изявление или вътре в заявка:
SET @var = 1
SELECT @var2 := 2
Когато разработите съхранена процедура в MySQL, можете да предадете входните параметри и да декларирате локалните променливи:
DELIMITER //
CREATE PROCEDURE prc_test (var INT)
BEGIN
DECLARE var2 INT;
SET var2 = 1;
SELECT var2;
END;
//
DELIMITER ;
Тези променливи не се добавят с никакви префикси.
Разликата между променлива на процедурата и специфична за сесия дефинирана от потребител променлива е, че променливата на процедурата се инициализира повторно на NULL
всеки път, когато процедурата се извиква, докато специфичната за сесията променлива не е:
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
Както можете да видите, var2
(променлива на процедурата) се инициализира отново всеки път, когато процедурата бъде извикана, докато @var2
(специфична за сесия променлива) не е.
(В допълнение към потребителски дефинирани променливи, MySQL също има някои предварително дефинирани "системни променливи", които могат да бъдат "глобални променливи", като @@global.port
или "променливи на сесията" като @@session.sql_mode
; тези "променливи на сесията" не са свързани със специфични за сесията дефинирани от потребителя променливи.)