OceanBaseデータベースは一般的な代入演算子をサポートしています。
論理演算子の概要
| 演算子 | 引数 | 意味 |
|---|---|---|
| := | 一元 | 演算子の右側の値を左側の変数に代入します |
| = | 一元 | 値の代入(SET ステートメントの一部として、または UPDATE ステートメント内の SET 句の一部として) |
説明
赋値演算子 :=
:= の右側の値は、リテラル、変数、またはクエリ結果といった有効な式であり、その値がスカラー値であることが前提です。同一の SET ステートメント内で複数回の代入を実行できます。また、同一ステートメント内で複数回の代入を行うことも可能です。
= とは異なり、:= 演算子は決して比較演算子として解釈されることはありません。これは、有効なSQLステートメント内であれば、SET ステートメントに限らず、:= を使用して変数に値を代入できることを意味します。
例:
obclient> SELECT @var1 := 1, @var2;
+------------+-------+
| @var1 := 1 | @var2 |
+------------+-------+
| 1 | NULL |
+------------+-------+
1 row in set
obclient> SELECT @var1:=COUNT(*) FROM t1;
+-----------------+
| @var1:=COUNT(*) |
+-----------------+
| 5 |
+-----------------+
1 row in set
obclient> SELECT @var1;
+-------+
| @var1 |
+-------+
| 5 |
+-------+
1 row in set
赋値演算子 =
= 演算子は、以下の2つの場合に代入を実行します:
SETステートメントでは、=は代入演算子と見なされ、演算子の右側の値を左側の変数に代入するために使用されます。したがって、SETステートメント内で使用する場合、=と:=の処理方法は同じです。UPDATEステートメントのSET句では、=は代入演算子として機能します。この場合、UPDATEステートメントのWHERE条件が満たされると、演算子の右側の値が左側の列に代入されます。UPDATEステートメントの同一SET句内で複数回の代入を行うことができます。
上記の2つの場合を除き、= は常に比較演算子と見なされます。
obclient> SELECT * FROM t1;
+------+------+
| c1 | c2 |
+------+------+
| 1 | 1 |
+------+------+
1 row in set
obclient> UPDATE t1 SET c1 = c1 + 1, c2 = c1;
Query OK, 1 row affected
Rows matched: 1 Changed: 1 Warnings: 0
obclient> SELECT * FROM t1;
+------+------+
| c1 | c2 |
+------+------+
| 2 | 2 |
+------+------+
1 row in set