-
:=
割り当て演算子。 演算子の左側にあるユーザー変数が右側にある値に代入されます。 右側の値は、リテラル値、値を格納する別の変数、またはクエリーの結果を含むスカラー値を生成する任意の有効な式 (この値がスカラー値の場合) である可能性があります。 同じ
SET
ステートメントで、複数の割り当てを実行できます。 同じステートメントで複数の割当てを実行できます。=
とは異なり、:=
演算子は比較演算子として解釈されません。 つまり、(SET
ステートメントだけでなく) 有効な任意の SQL ステートメントで:=
を使用すれば、値を変数に割り当てることができます。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「ユーザー定義変数」では、これを回避するべき理由について説明されています。 -
=
この演算子は、次の 2 つのパラグラフで説明する 2 つのケースで値の割り当てを実行する際に使用されます。
SET
ステートメントでは、=
は、演算子の左側にあるユーザー変数を右側にある値に代入する割り当て演算子として処理されます。 (言い換えると、SET
ステートメントで使用されると、=
は:=
と同じように処理されます。) 右側の値は、リテラル値、値を格納する別の変数、またはクエリーの結果を含むスカラー値を生成する任意の有効な式 (この値がスカラー値の場合) である可能性があります。 同じSET
ステートメントで、複数の割り当てを実行できます。UPDATE
ステートメントのSET
句では、=
は割り当て演算子としても機能します。ただし、この場合、UPDATE
の一部であるWHERE
条件に一致していれば、演算子の左側で指定されたカラムが右側に指定された値であるとみなされます。UPDATE
ステートメントの同じ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
詳細は、セクション13.7.6.1「変数代入の SET 構文」、セクション13.2.13「UPDATE ステートメント」、およびセクション13.2.11「サブクエリー」を参照してください。