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