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

183

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

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

SET start = 1;
SET finish = 10;

SELECT * FROM places WHERE place BETWEEN start AND finish;
Теги:

4 ответа

294
Лучший ответ

В 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;
    
  • 3
    Как-то = оператор не работает для меня. Он работал нормально, когда я использовал := оператор.
  • 19
    Оператор = работает только в предложении SET . Для присвоения значения переменной в запросе SELECT вы можете использовать := оператор, например, SELECT @start := 1
Показать ещё 7 комментариев
7

Используйте установить или выберите

SET @counter := 100;
SELECT @variable_name := value;

пример:

SELECT @price := MAX(product.price)
FROM product 
6

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

  • 1
    В чем разница между = и := ?
  • 2
    Я думаю, что для mysql синтаксиса SELECT необходимо отделить значение = (comparation) от: = (asign)
2

DECLARE var_name [, var_name]... type [DEFAULT value] Этот оператор объявляет локальные переменные в сохраненных программах.

Ex. DECLARE id INT unsigned DEFAULT 1;

Чтобы предоставить значение по умолчанию для переменной, включите предложение DEFAULT. Значение может быть указано как выражение; она не должна быть постоянной. Если предложение DEFAULT отсутствует, начальное значение равно NULL.

Локальные переменные обрабатываются как хранимые параметры процедуры в отношении типа данных и проверки переполнения.

Объявления переменных должны отображаться перед объявлениями курсора или обработчика.

Локальные имена переменных не чувствительны к регистру. Допустимые символы и правила цитирования такие же, как для других идентификаторов

Объем локальной переменной - это блок BEGIN... END, в котором он объявлен. Переменная может упоминаться в блоках, вложенных в блок объявления, кроме тех блоков, которые объявляют переменную с тем же именем.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню