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 sampai sesi berakhir.
Mereka diawali dengan @
tanda, 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 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-variabel ini tidak diawali dengan awalan.
Perbedaan antara variabel prosedur dan variabel yang ditentukan pengguna khusus sesi adalah variabel prosedur diinisialisasi ulang untuk 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, yang mungkin "variabel global" seperti @@global.port
atau "variabel sesi" seperti @@session.sql_mode
; "variabel sesi" ini tidak terkait dengan sesi yang ditentukan pengguna yang ditentukan pengguna variabel.)