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


MySQL 8.4 參考手冊  /  ...  /  賦值運算符

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 子句中,= 也充當賦值運算符;但在這種情況下,它會使運算符左側命名的欄採用右側給定的值,前提是符合任何屬於 UPDATEWHERE 條件。您可以在同一個 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 節,「子查詢」