Spec-Zone .ru
спецификации, руководства, описания, API
|
Оператор присваивания. Заставляет пользовательскую переменную на левой стороне оператора брать
значение с его правой стороны от него. Значение на правой стороне может быть литеральным значением,
другая переменная, хранящая значение, или любое юридическое выражение, которое приводит к скалярному
значению, включая результат запроса (при условии, что это значение является скалярным значением).
Можно выполнить многократные присвоения в том же самом SET
оператор. Можно выполнить многократные присвоения в том же
самом операторе -
В отличие от этого =
, :=
оператор никогда не интерпретируется как оператор сравнения. Это
означает, что можно использовать :=
в любом допустимом SQL-операторе (не только в SET
операторы), чтобы присвоить значение переменной.
mysql>SELECT @var1, @var2;
-> NULL, NULLmysql>SELECT @var1 := 1, @var2;
-> 1, NULLmysql>SELECT @var1, @var2;
-> 1, NULLmysql>SELECT @var1, @var2 := @var1;
-> 1, 1mysql>SELECT @var1, @var2;
-> 1, 1mysql>SELECT @var1:=COUNT(*) FROM t1;
-> 4mysql>SELECT @var1;
-> 4
Можно сделать использование присвоений значения :=
в других операторах кроме того SELECT
, такой как UPDATE
, как показано здесь:
mysql>SELECT @var1;
-> 4mysql>SELECT * FROM t1;
-> 1, 3, 5, 7mysql>UPDATE t1 SET c1 = 2 WHERE c1 = @var1:= 1;
Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0mysql>SELECT @var1;
-> 1mysql>SELECT * FROM t1;
-> 2, 3, 5, 7
В то время как также возможно и установить и считать значение той же самой переменной в единственном
SQL-операторе, используя :=
оператор, это не рекомендуется. Раздел
9.4, "Определяемые пользователем Переменные", объясняет, почему следует избежать
делать это.
Этот оператор используется, чтобы выполнить присвоения значения в двух случаях, описанных в следующих двух абзацах.
В пределах a SET
оператор, =
обрабатывается как
оператор присваивания, который заставляет пользовательскую переменную на левой стороне оператора
брать значение с его правой стороны от него. (Другими словами, когда использующийся в a SET
оператор, =
обрабатывается
тождественно к :=
.) Значение на правой стороне может быть литеральным значением,
другая переменная, хранящая значение, или любое юридическое выражение, которое приводит к скалярному
значению, включая результат запроса (при условии, что это значение является скалярным значением).
Можно выполнить многократные присвоения в том же самом SET
оператор.
В SET
пункт UPDATE
оператор, =
также действия как оператор присваивания; в этом случае,
однако, это заставляет столбец, названный на левой стороне оператора предполагать, что значение,
данное направо, предоставило любому WHERE
условия, которые являются
частью UPDATE
встречаются. Можно сделать многократные присвоения в том
же самом SET
пункт UPDATE
оператор.
В любом другом контексте, =
обрабатывается как оператор
сравнения.
mysql>SELECT @var1, @var2;
-> NULL, NULLmysql>SELECT @var1 := 1, @var2;
-> 1, NULLmysql>SELECT @var1, @var2;
-> 1, NULLmysql>SELECT @var1, @var2 := @var1;
-> 1, 1mysql>SELECT @var1, @var2;
-> 1, 1
Для получения дополнительной информации см. Раздел 13.7.4,"SET
Синтаксис", Раздел
13.2.11,"UPDATE
Синтаксис", и Раздел
13.2.10, "Синтаксис Подзапроса".