it-swarm.com.ru

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

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

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

SET start = 1;
SET finish = 10;

SELECT * FROM places WHERE place BETWEEN start AND finish;
282
cdub

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

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

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

  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;
    
484
Omesh

ЗАДАВАТЬ

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 .....

в этом случае результат выбора не содержит значений col2

20
bortunac

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

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

пример : 

SELECT @price := MAX(product.price)
FROM product 
10
KouchakYazdi

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

Ex. DECLARE id INT unsigned DEFAULT 1; 

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

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

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

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

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

2
AJS

SET Value

 declare Regione int;   
 set Regione=(select  id from users
 where id=1) ;
 select Regione ;
0
Hari Lakkakula

Для любого человека, использующего @variable в функции concat_ws для получения сцепленных значений, не забудьте переинициализировать его с пустым значением. В противном случае он может использовать старое значение для той же сессии.

Set @Ids = '';

select 
  @Ids := concat_ws(',',@Ids,tbl.Id),
  tbl.Col1,
  ...
from mytable tbl;
0
Imran Javed