14.4.4 Операторы присваивания
Таблица 14.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 с использованием оператора
:=, это не рекомендуется. Раздел 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.