在本教學中,您將學習如何在SQL語句中使用MySQL用戶定義的變數。
MySQL用戶定義變數簡介
有時候,您希望將值從SQL語句傳遞給另一個SQL語句。為此,您可將該值存儲在第一個語句中的MySQL用戶定義的變數中,並在隨後的語句中引用它。
要創建用戶定義的變數,請使用格式@variable_name
,其中variable_name
由字母數字字元組成。 用戶自定義變數的最大長度為64個字元(MySQL 5.7.5之前的版本)
用戶定義的變數不區分大小寫。 這意味著@id
和@ID
是一樣的。
可以將用戶定義的變數分配給某些數據類型,例如整數,浮點,小數,字串或NULL。
由一個客戶端定義的用戶定義的變數不被其他客戶端看到。 換句話說,用戶定義的變數是特定於會話的。
注意,用戶定義的變數是MySQL特定於SQL標準的擴展。 它們在其他資料庫系統中可能不可用。
MySQL變數賦值
有兩種方法可以將值分配給用戶定義的變數。
第一種方法是使用SET
語句如下:
SET @variable_name := value;
您可以使用:=
或=
作為SET
語句中的賦值運算符。 例如,該語句將數字100
分配給變數@counter
。
SET @counter := 100;
為變數分配值的第二種方法是使用SELECT語句。 在這種情況下,您必須使用:=
賦值運算符,因為在SELECT
語句中,MySQL將=
運算符視為相等運算符。
SELECT @variable_name := value;
在賦值之後,可以使用後續語句中允許運算式的變數,例如,在WHERE子句,INSERT或UPDATE語句中。
MySQL變數示例
以下語句在products
表中查詢獲得最昂貴的產品,並將價格分配給用戶定義的變數@msrp
:
SELECT
@msrp:=MAX(msrp)
FROM
products;
執行上面查詢語句,得到以下結果 -
mysql> SELECT
@msrp:=MAX(msrp)
FROM
products;
+------------------+
| @msrp:=MAX(msrp) |
+------------------+
| 214.30 |
+------------------+
1 row in set
mysql> select @msrp as max_price ;
+-----------+
| max_price |
+-----------+
| 214.30 |
+-----------+
1 row in set
以下語句使用@msrp
變數來查詢最昂貴產品的資訊。
SELECT
productCode, productName, productLine, msrp
FROM
products
WHERE
msrp = @msrp;
有時候,您想要在表中插入一行,獲取最後一個插入ID,並使用將此ID作一項數據插入另一個表。 在這種情況下,您可以使用用戶定義的變數來存儲AUTO_INCREMENT列生成的最新ID
,如下所示。
SELECT @id:=LAST_INSERT_ID();
用戶定義的變數只能保存一個值。 如果SELECT
語句返回多個值,則變數將獲取結果中最後一行的值。
SELECT
@buyPrice:=buyprice
FROM
products
WHERE
buyprice > 95
ORDER BY buyprice;
執行上面語句,得到以下結果 -
+---------------------+
| @buyPrice:=buyprice |
+---------------------+
| 95.34 |
| 95.59 |
| 98.30 |
| 98.58 |
| 101.51 |
| 103.42 |
+---------------------+
6 rows in set
接下來,查詢上面變數(@buyprice
)的值,結果如下所示 -
mysql> SELECT @buyprice;
+-----------+
| @buyprice |
+-----------+
| 103.42 |
+-----------+
1 row in set
在本教學中,我們向您展示了如何使用SQL語句中的MySQL變數在會話內的語句之間傳遞數據。