MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  割り当て演算子

12.4.4 割り当て演算子

表 12.6 「代入演算子」

名前 説明
:= 値を割り当てます
= (SET ステートメントの一部として、または UPDATE ステートメントの SET 句の一部として) 値を割り当てます

  • :=

    割り当て演算子。 演算子の左側にあるユーザー変数が右側にある値に代入されます。 右側の値は、リテラル値、値を格納する別の変数、またはクエリーの結果を含むスカラー値を生成する任意の有効な式 (この値がスカラー値の場合) である可能性があります。 同じ 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「サブクエリー」を参照してください。


関連キーワード:  関数, 割り当て, ステートメント, 空間, リファレンス, 変数, UPDATE, 処理, 実行, マニュアル