Spec-Zone.ru › MySQL 9.2

14.4.4 Операторы присваивания

Таблица 14.6 Операторы присваивания

Таблица 14.6 Операторы присваивания
Имя Описание
:= Присвоить значение
= Присвоить значение (как часть оператора SET, или в качестве части условия SET оператора UPDATE)

  • :=

    Оператор присваивания. Приводит к тому, что переменная пользователя в левой части оператора принимает значение справа. Значение в правой части может быть литерой, другой переменной, хранящей значение, или любым допустимым выражением, которое возвращает скалярное значение, включая результат запроса (при условии, что это скалярное значение). Вы можете выполнить несколько присваиваний в одном операторе SET. Вы можете выполнить несколько присваиваний в одном операторе.

    В отличие от =, оператор := никогда не интерпретируется как оператор сравнения. Это означает, что вы можете использовать := в любом корректном операторе SQL (не только в операторах SET) для присвоения значения переменной.

    mysql> SELECT @var1, @var2;
            -> NULL, NULL
    mysql> SELECT @var1 := 1, @var2;
            -> 1, NULL
    mysql> SELECT @var1, @var2;
            -> 1, NULL
    mysql> SELECT @var1, @var2 := @var1;
            -> 1, 1
    mysql> SELECT @var1, @var2;
            -> 1, 1
    
    mysql> SELECT @var1:=COUNT(*) FROM t1;
            -> 4
    mysql> SELECT @var1;
            -> 4
    

    Вы можете выполнять присваивания значений с помощью := в других операторах помимо SELECT, таких как UPDATE, как показано ниже:

    mysql> SELECT @var1;
            -> 4
    mysql> SELECT * FROM t1;
            -> 1, 3, 5, 7
    
    mysql> UPDATE t1 SET c1 = 2 WHERE c1 = @var1:= 1;
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> SELECT @var1;
            -> 1
    mysql> SELECT * FROM t1;
            -> 2, 3, 5, 7
    

    Хотя возможно и установить, и считать значение одной и той же переменной в одном операторе SQL с использованием оператора :=, это не рекомендуется. Раздел 11.4, «Переменные, определенные пользователем» объясняет, почему следует этого избегать.

  • =

    Этот оператор используется для выполнения присваивания значений в двух случаях, описанных в следующих двух абзацах.

    В операторе SET, = рассматривается как оператор присваивания, который приводит к тому, что переменная пользователя в левой части оператора принимает значение справа. (Другими словами, при использовании в операторе SET, = обрабатывается идентично :=.) Значение в правой части может быть литерой, другой переменной, хранящей значение, или любым допустимым выражением, которое возвращает скалярное значение, включая результат запроса (при условии, что это скалярное значение). Вы можете выполнить несколько присваиваний в одном операторе SET.

    В условии SET оператора UPDATE, = также действует как оператор присваивания; в этом случае, однако, это приводит к тому, что столбец, указанный в левой части оператора, принимает значение, указанное справа, при условии выполнения всех условий WHERE, являющихся частью оператора UPDATE. Вы можете выполнить несколько присваиваний в одном условии SET оператора UPDATE.

    В любом другом контексте, = рассматривается как оператор сравнения.

    mysql> SELECT @var1, @var2;
            -> NULL, NULL
    mysql> SELECT @var1 := 1, @var2;
            -> 1, NULL
    mysql> SELECT @var1, @var2;
            -> 1, NULL
    mysql> SELECT @var1, @var2 := @var1;
            -> 1, 1
    mysql> SELECT @var1, @var2;
            -> 1, 1
    

    Для получения дополнительной информации см. Раздел 15.7.6.1, «Синтаксис SET для присваивания переменным», Раздел 15.2.17, «Оператор UPDATE» и Раздел 15.2.15, «Подзапросы».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/assignment-operators.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API