Как объявить переменную в MySQL?
как объявить переменную в mysql, чтобы мой второй запрос мог ее использовать?
Я хотел бы написать что-то вроде:
SET start = 1;
SET finish = 10;
SELECT * FROM places WHERE place BETWEEN start AND finish;
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;
пользовательским переменным можно присвоить значение из ограниченного набора данных типы: целочисленная, десятичная, с плавающей запятой, двоичная или небинарная строка, или значение 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;
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 без знака по умолчанию 1;
чтобы предоставить значение по умолчанию для переменной, включите предложение по умолчанию. Значение может быть указано как выражение; оно не обязательно должно быть константой. Если предложение по умолчанию отсутствует, начальное значение равно NULL.
локальные переменные обрабатываются как сохраненные рутинные параметры с уважением для проверки типа данных и переполнения.
объявления переменных должны отображаться перед объявлениями курсора или обработчика.
имена локальных переменных не учитывают регистр. Допустимые символы и правила цитирования такие же, как и для других идентификаторов
областью действия локальной переменной является BEGIN ... Блок END, в котором он объявлен. На переменную можно ссылаться в блоках, вложенных в блок Объявления, за исключением тех блоков, которые объявляют переменную с такое же имя.