4 ответов:
есть в основном три типа переменных в MySQL:
пользовательские переменные (префикс
@):вы можете получить доступ к любой пользовательской переменной без объявления или инициализация его. Если вы ссылаетесь на переменную, которая не была инициализированный, он имеет значение
NULLи типом string.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;пользовательским переменным можно присвоить значение из ограниченного набора данных типы: целочисленная, десятичная, с плавающей запятой, двоичная или небинарная строка, или нулевое значение.
пользовательские переменные сессии. То есть, пользователь переменная, определенная одним клиентом, не может быть видна или использована другим клиенты.
их можно использовать в
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;
SET
SET @var_name = valueили
SET @var := valueобоих операторов = и := приняты
выберите
SELECT col1, @var_name := col2 from tb_name WHERE "conditon";если несколько наборов записей найдено только последнее значение в col2-keep (override);
SELECT col1, col2 INTO @var_name, col3 FROM .....в этом случае результат select не содержит значения col2
использовать set или выберите
SET @counter := 100; SELECT @variable_name := value;
пример :
SELECT @price := MAX(product.price) FROM product
объявить имя_переменной [, имя_переменной] ... тип [значение по умолчанию] Этот оператор объявляет локальные переменные в сохраненных программах.
Ex. Объявить id INT unsigned DEFAULT 1;
чтобы указать значение по умолчанию для переменной, включите предложение по умолчанию. Значение может быть задано как выражение; оно не обязательно должно быть константой. Если предложение по умолчанию отсутствует, начальное значение равно NULL.
локальные переменные обрабатываются как сохраненные рутинные параметры с уважением для проверки типа данных и переполнения.
объявления переменных должны появляться перед объявлениями курсора или обработчика.
локальные имена переменных не чувствительны к регистру. Допустимые символы и правила цитирования такие же, как и для других идентификаторов
область действия локальной переменной-начало ... Конечный блок, в котором он объявлен. На переменную можно ссылаться в блоках, вложенных в блок Объявления, за исключением тех блоков, которые объявляют переменную с помощью такое же имя.
Comments