Spec-Zone.ru › MySQL 5.7

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

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

Таблица 12.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-оператор с помощью оператора :=, это не рекомендуется. Раздел 9.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
    

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

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

Spec-Zone.ru

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