W MySQL istnieją głównie trzy typy zmiennych:
-
Zmienne zdefiniowane przez użytkownika (z prefiksem
@):Możesz uzyskać dostęp do dowolnej zmiennej zdefiniowanej przez użytkownika bez deklarowania jej lub jej inicjowania. Jeśli odwołujesz się do zmiennej, która nie została zainicjowana, ma ona wartość
NULLi typ ciągu.SELECT @var_any_var_nameMożesz zainicjować zmienną za pomocą
SETlubSELECToświadczenie:SET @start = 1, @finish = 10;lub
SELECT @start := 1, @finish := 10; SELECT * FROM places WHERE place BETWEEN @start AND @finish;Zmiennym użytkownika można przypisać wartość z ograniczonego zestawu typów danych:liczby całkowitej, dziesiętnej, zmiennoprzecinkowej, ciągu binarnego lub niebinarnego lub wartości NULL.
Zmienne zdefiniowane przez użytkownika są specyficzne dla sesji. Oznacza to, że zmienna użytkownika zdefiniowana przez jednego klienta nie może być widziana ani używana przez innych klientów.
Mogą być używane w
SELECTzapytania przy użyciu Zaawansowane techniki zmiennych użytkownika MySQL . -
Zmienne lokalne (bez prefiksu) :
Zmienne lokalne należy zadeklarować za pomocą
DECLAREprzed uzyskaniem do niego dostępu.Mogą być używane jako zmienne lokalne i parametry wejściowe wewnątrz procedury składowanej:
DELIMITER // CREATE PROCEDURE sp_test(var1 INT) BEGIN DECLARE start INT unsigned DEFAULT 1; DECLARE finish INT unsigned DEFAULT 10; SELECT var1, start, finish; SELECT * FROM places WHERE place BETWEEN start AND finish; END; // DELIMITER ; CALL sp_test(5);Jeśli
DEFAULTbrak klauzuli, wartość początkowa toNULL.Zakres zmiennej lokalnej to
BEGIN ... ENDblok, w którym jest zadeklarowany. -
Zmienne systemowe serwera (z prefiksem
@@):Serwer MySQL obsługuje wiele zmienne systemowe skonfigurowane na wartość domyślną. Mogą być typu
GLOBAL,SESSIONlubBOTH.Zmienne globalne wpływają na ogólne działanie serwera, podczas gdy zmienne sesji wpływają na jego działanie dla poszczególnych połączeń klientów.
Aby zobaczyć aktualne wartości używane przez działający serwer, użyj
SHOW VARIABLESoświadczenie lubSELECT @@var_name.SHOW VARIABLES LIKE '%wait_timeout%'; SELECT @@sort_buffer_size;Można je ustawić podczas uruchamiania serwera za pomocą opcji w wierszu poleceń lub w pliku opcji. Większość z nich można zmieniać dynamicznie podczas działania serwera za pomocą
SET GLOBALlubSET SESSION:-- Syntax to Set value to a Global variable: SET GLOBAL sort_buffer_size=1000000; SET @@global.sort_buffer_size=1000000; -- Syntax to Set value to a Session variable: SET sort_buffer_size=1000000; SET SESSION sort_buffer_size=1000000; SET @@sort_buffer_size=1000000; SET @@local.sort_buffer_size=10000;