MySQL變數

2019-10-16 22:56:53

在本教學中,您將學習如何在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子句INSERTUPDATE語句中。

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變數在對談內的語句之間傳遞資料。