12.4.4 Операторы присваивания
Таблица 12.6 Операторы присваивания
-
Оператор присваивания. Приводит к тому, что переменной пользователя слева от оператора присваивается значение справа от него. Значением справа может быть литеральное значение, другая переменная, хранящая значение, или любое допустимое выражение, возвращающее скалярное значение, включая результат запроса (при условии, что это скалярное значение). Вы можете выполнить несколько присваиваний в одном операторе
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.