MySQL Variables

摘要:在本教程中,您将学习如何在 SQL 语句中使用 MySQL 用户定义变量。

MySQL用户定义变量简介

有时,您希望将一个值从一个 SQL 语句传递到另一个 SQL 语句。为此,您可以将该值存储在第一个语句中的 MySQL 用户定义变量中,并在后续语句中引用它。

要创建用户定义变量,请使用@variable_name格式,其中variable_name由字母数字字符组成。从 MySQL 5.7.5 开始,用户定义变量的最大长度为 64 个字符

用户定义的变量不区分大小写。这意味着@id@ID是相同的。

您可以将用户定义的变量分配给某些数据类型,例如整数、浮点、小数、字符串或NULL

由一个客户端定义的用户定义变量对其他客户端不可见。换句话说,用户定义的变量是特定于会话的。

请注意,用户定义的变量是 MySQL 特定的 SQL 标准扩展。它们可能在其他数据库系统中不可用。

MySQL变量赋值

有两种方法可以为用户定义的变量赋值。

第一种方法是使用SET语句,如下所示:

SET @variable_name := value;Code language: SQL (Structured Query Language) (sql)

您可以使用 := 或 = 作为 SET 语句中的赋值运算符。例如,该语句将数字 100 分配给变量 @counter。

SET @counter := 100;Code language: SQL (Structured Query Language) (sql)

为变量赋值的第二种方法是使用SELECT 语句。在这种情况下,您必须使用 := 赋值运算符,因为在 SELECT 语句中,MySQL 将 = 运算符视为等于运算符。

SELECT @variable_name := value;Code language: SQL (Structured Query Language) (sql)

赋值后,您可以在允许使用表达式的后续语句中使用该变量,例如在WHERE子句、 INSERTUPDATE语句中。

MySQL 变量示例

以下语句获取products表中最昂贵的产品,并将价格分配给用户定义的变量 @msrp:

SELECT 
    @msrp:=MAX(msrp)
FROM
    products;
Code language: SQL (Structured Query Language) (sql)
MySQL Variables Example

以下语句使用@msrp变量来查询最昂贵的产品的信息。

SELECT 
    productCode, productName, productLine, msrp
FROM
    products
WHERE
    msrp = @msrp;Code language: SQL (Structured Query Language) (sql)

有时,您想要向表中插入一行,获取最后一个插入 ID,然后使用它向另一个表中插入数据。在这种情况下,您可以使用用户定义的变量来存储AUTO_INCREMENT列生成的最新 id,如下所示。

SELECT @id:=LAST_INSERT_ID();Code language: SQL (Structured Query Language) (sql)

用户定义的变量只能保存单个值。如果 SELECT 语句返回多个值,则该变量将采用结果中最后一行的值。

SELECT 
    @buyPrice:=buyprice
FROM
    products
WHERE
    buyprice > 95
ORDER BY buyprice;Code language: SQL (Structured Query Language) (sql)
MySQL 变量多行
SELECT @buyprice;
Code language: SQL (Structured Query Language) (sql)
MySQL 选择变量

在本教程中,我们向您展示了如何在 SQL 语句中使用 MySQL 变量在会话内的语句之间传递数据。

本教程有帮助吗?