文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  賦值運算子

14.4.4 賦值運算子

表 14.6 賦值運算子

名稱 說明
:= 賦值
= 賦值(作為 SET 陳述式的一部分,或是 UPDATE 陳述式中 SET 子句的一部分)

  • :=

    賦值運算子。使運算子左側的使用者變數取用其右側的值。右側的值可以是常值、儲存值的另一個變數,或任何產生純量值的合法運算式,包括查詢的結果 (前提是此值是純量值)。您可以在同一個 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 陳述式中執行多個賦值。

    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

    如需詳細資訊,請參閱第 15.7.6.1 節,「SET 變數賦值的語法」第 15.2.17 節,「UPDATE 陳述式」第 15.2.15 節,「子查詢」