Ответ 1
В MySQL существует в основном три типа переменных:
-
Пользовательские переменные (с префиксом
@
):Вы можете получить доступ к любой пользовательской переменной без объявления ее или инициализируя его. Если вы ссылаетесь на переменную, которая не была инициализировано, оно имеет значение
NULL
и тип строки.SELECT @var_any_var_name
Вы можете инициализировать переменную с помощью инструкции
SET
илиSELECT
:SET @start = 1, @finish = 10;
или
SELECT @start := 1, @finish := 10; SELECT * FROM places WHERE place BETWEEN @start AND @finish;
Пользовательским переменным может быть присвоено значение из ограниченного набора данных типы: целочисленные, десятичные, плавающие, двоичные или недвоичные строки, или NULL.
Пользовательские переменные зависят от сеанса. То есть пользователь переменная, определенная одним клиентом, не может быть замечена или использована другими клиентов.
Они могут использоваться в
SELECT
запросах с использованием Расширенных методов пользовательской переменной MySQL. -
Локальные переменные (без префикса):
Локальные переменные должны быть объявлены с помощью
DECLARE
до доступ к ней.Они могут использоваться как локальные переменные и входные параметры внутри хранимой процедуры:
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);
Если предложение
DEFAULT
отсутствует, начальное значениеNULL
.Объем локальной переменной - это блок
BEGIN ... END
внутри который он объявлен. -
Системные переменные сервера (с префиксом
@@
):Сервер MySQL поддерживает множество системных переменных, настроенных на значение по умолчанию. Они могут иметь тип
GLOBAL
,SESSION
илиBOTH
.Глобальные переменные влияют на общую работу сервера, тогда как переменные сеанса влияют на его работу для отдельных клиентских подключений.
Чтобы просмотреть текущие значения, используемые текущим сервером, используйте оператор
SHOW VARIABLES
илиSELECT @@var_name
.SHOW VARIABLES LIKE '%wait_timeout%'; SELECT @@sort_buffer_size;
Они могут быть установлены при запуске сервера с использованием параметров в командной строке или в файле параметров. Большинство из них можно динамически изменять, пока сервер работает с помощью
SET GLOBAL
илиSET 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;