Как объявить переменную в mysql, чтобы мой второй запрос мог ее использовать?
Я хотел бы написать что-то вроде:
SET start = 1;
SET finish = 10;
SELECT * FROM places WHERE place BETWEEN start AND finish;
Как объявить переменную в mysql, чтобы мой второй запрос мог ее использовать?
Я хотел бы написать что-то вроде:
SET start = 1;
SET finish = 10;
SELECT * FROM places WHERE place BETWEEN start AND finish;
В 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;
Используйте установить или выберите
SET @counter := 100;
SELECT @variable_name := value;
пример:
SELECT @price := MAX(product.price)
FROM product
SET
SET @var_name = value
ИЛИ
SET @var := value
оба оператора = и : = принимаются
SELECT
SELECT col1, @var_name := col2 from tb_name WHERE "conditon";
если несколько наборов записей нашли только последнее значение в col2, удерживайте (переопределить);
SELECT col1, col2 INTO @var_name, col3 FROM .....
в этом случае результат выбора не содержит значений col2
DECLARE var_name [, var_name]... type [DEFAULT value] Этот оператор объявляет локальные переменные в сохраненных программах.
Ex. DECLARE id INT unsigned DEFAULT 1;
Чтобы предоставить значение по умолчанию для переменной, включите предложение DEFAULT. Значение может быть указано как выражение; она не должна быть постоянной. Если предложение DEFAULT отсутствует, начальное значение равно NULL.
Локальные переменные обрабатываются как хранимые параметры процедуры в отношении типа данных и проверки переполнения.
Объявления переменных должны отображаться перед объявлениями курсора или обработчика.
Локальные имена переменных не чувствительны к регистру. Допустимые символы и правила цитирования такие же, как для других идентификаторов
Объем локальной переменной - это блок BEGIN... END, в котором он объявлен. Переменная может упоминаться в блоках, вложенных в блок объявления, кроме тех блоков, которые объявляют переменную с тем же именем.