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ść
NULL
i typ ciągu.SELECT @var_any_var_name
Możesz zainicjować zmienną za pomocą
SET
lubSELECT
oś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
SELECT
zapytania przy użyciu Zaawansowane techniki zmiennych użytkownika MySQL . -
Zmienne lokalne (bez prefiksu) :
Zmienne lokalne należy zadeklarować za pomocą
DECLARE
przed 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
DEFAULT
brak klauzuli, wartość początkowa toNULL
.Zakres zmiennej lokalnej to
BEGIN ... END
blok, 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
,SESSION
lubBOTH
.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 VARIABLES
oś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 GLOBAL
lubSET 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;