Как объявить переменную в MySQL?

как объявить переменную в mysql, чтобы мой второй запрос мог ее использовать?

Я хотел бы написать что-то вроде:

SET start = 1;
SET finish = 10;

SELECT * FROM places WHERE place BETWEEN start AND finish;

4 ответов


в MySQL есть в основном три типа переменных:

  1. пользовательские переменные (префикс @):

    вы можете получить доступ к любой пользовательской переменной без объявления или проинициализируйте его. Если вы ссылаетесь на переменную, которая не была инициализированный, он имеет значение 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 техники.

  2. Локальные Переменные (нет префикса) :

    локальные переменные должны быть объявлены с помощью 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 блок в течение который объявлен.

  3. Системные Переменные Сервера (префикс @@):

    сервер 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, в котором он объявлен. На переменную можно ссылаться в блоках, вложенных в блок Объявления, за исключением тех блоков, которые объявляют переменную с такое же имя.