MySQL memiliki konsep variabel yang ditentukan pengguna .
Mereka adalah variabel yang diketik secara longgar yang dapat diinisialisasi di suatu tempat dalam suatu sesi dan mempertahankan nilainya hingga sesi berakhir.
Mereka diawali dengan @
tanda tangani, seperti ini:@var
Anda dapat menginisialisasi variabel ini dengan SET
pernyataan atau di dalam kueri:
SET @var = 1
SELECT @var2 := 2
Saat Anda mengembangkan prosedur tersimpan di MySQL, Anda dapat meneruskan parameter input dan mendeklarasikan variabel lokal:
DELIMITER //
CREATE PROCEDURE prc_test (var INT)
BEGIN
DECLARE var2 INT;
SET var2 = 1;
SELECT var2;
END;
//
DELIMITER ;
Variabel ini tidak diawali dengan awalan apa pun.
Perbedaan antara variabel prosedur dan variabel yang ditentukan pengguna khusus sesi adalah bahwa variabel prosedur diinisialisasi ulang ke NULL
setiap kali prosedur dipanggil, sedangkan variabel khusus sesi tidak:
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
Seperti yang Anda lihat, var2
(variabel prosedur) diinisialisasi ulang setiap kali prosedur dipanggil, sementara @var2
(variabel khusus sesi) tidak.
(Selain variabel yang ditentukan pengguna, MySQL juga memiliki beberapa "variabel sistem" yang telah ditentukan sebelumnya, yang mungkin berupa "variabel global" seperti @@global.port
atau "variabel sesi" seperti @@session.sql_mode
; "variabel sesi" ini tidak terkait dengan variabel yang ditentukan pengguna khusus sesi.)